{
 "openapi": "3.1.0",
 "info": {
  "title": "PatentRef API (PatentsView-compatible)",
  "version": "1.21.0",
  "summary": "The PatentSearch v1 grammar served from PatentRef's own snapshot of USPTO PatentsView bulk data.",
  "description": "Same endpoint paths, same q/f/s/o parameters, same response shape and same error codes as the USPTO PatentSearch API that PatentsView paused on 2026-03-20, so existing clients work by changing the base URL and adding a key: the base URL becomes https://patentref.io and every data request sends a PatentRef key in X-Api-Key (a PatentsView key does not work here). Every response carries X-Data-Version (one value per build). Patent data from PatentsView and the USPTO under CC BY 4.0; the license register is at https://patentref.io/LICENSES.md. Agent guide: https://patentref.io/llms.txt. Grammar in one paragraph: q, f, s and o are JSON values (OpenAPI content application/json; URL-encoded on GET, one JSON body on POST); q is one JSON object with exactly one key (the Query schema); a plain key means _eq; operators are _eq, _neq, _gt, _gte, _lt, _lte, _begins, _contains, _text_all, _text_any, _text_phrase, _and, _or, _not; dotted field names reach nested groups; f lists the fields to return (each endpoint's <Name>Fields schema lists the names); s is a list of {field: asc|desc} on the sortable fields (<Name>Sort); o holds size (max 1000), after (cursor, the sort values of the last row), pad_patent_id and exclude_withdrawn (the Options schema). offset is rejected; page with o.after. _text_phrase matches the words in order on tokens, not the exact characters. Requests: on GET, percent-encoding every value always works, and raw JSON in the query string works too except that a space must be %20, a + is read as a space and &, # and % must be percent-encoded; the GET request line may be 4,094 bytes (longer answers 400 with an HTML page from the web server in front of the API, no X-Status-Reason-Code). A POST body may be 64,000 bytes (larger answers 413, an empty body, no X-Status-Reason-Code) and q in it 16 KB (400 ERR_Q). A list route answers with or without the trailing slash; a detail route without it answers 301 to the form with it, which a POST body does not follow. A number field takes a JSON number or a string that reads as one (\"2021\"). The rows of a nested group come in the order of their source: inventors, assignees and attorneys by their *_sequence field, the other groups in the row order of the PatentsView bulk file, a weekly grant's rows in the order of its XML. Field kinds (x-patentref-kind on every record field): keyword: a plain key or _eq is exact and case-sensitive, _begins and _contains are case-insensitive on the whole value, sortable. text: _text_all, _text_any and _text_phrase search its words; a plain key or _eq matches any of the words; _begins and _contains test single words; not sortable. text+keyword: the full-text operators search its words, while a plain key, _eq, _begins and _contains use the whole value as on a keyword field; sortable. date and number: equality and the ranges _gt, _gte, _lt, _lte; a partial date (\"2010\", \"2010-06\") spans its unit. boolean: equality. none: returned but not searchable (a query on it matches nothing, as upstream). f-only: the lapse group's fields and the assignee names as printed on the grant (raw_assignee_*), returned when f names them; q or s on them answers 400 ERR_Q. A link field (format uri, for example cpc_current.cpc_class) returns the URL of the detail record and takes the kind of the id behind it: keyword when q on it matches that id (\"H01\"), none when the index has no search field for it (inventors.inventor, assignees.assignee; query inventors.inventor_id or assignees.assignee_id). Sorting takes top-level fields only (the <Name>Sort schemas). Words are FTS5 unicode61 tokens: case and punctuation such as hyphens are ignored and there is no stemming, so _text_phrase \"solid state battery\" also matches \"solid-state battery\". PatentRef additions: expiry and maintenance-fee status of a patent with its basis and as-of date (the lapse group, returned when f names \"lapse\" on /api/v1/patent/, and GET /api/v1/lapse/status/{patent_id}/), nearest patents to a text (GET /api/v1/lapse/similar), the claim tree of a patent with every part located by offsets in the published claim text (GET /api/v1/structure/claims/{patent_id}/), a brief of a patent cut to a token budget (GET /api/v1/structure/brief/{patent_id}/), the claim counts of a patent defined against the USPTO Patent Claims Research Dataset (GET /api/v1/structure/counts/{patent_id}/), a triage table of up to 500 patents (POST /api/v1/structure/triage/), build facts (GET /api/v1/meta/), health and status, and the rules layer (GET /api/v1/rules/: fees, generic windows, representation, PPH and grace-period rules of the US, EP, CN, JP, KR and AU offices and the PCT, each row with its official source and a verbatim quote). Nothing returned is a legal conclusion. Versions: info.version is 1.MINOR.PATCH. The 1 is the /api/v1/ grammar and stays while it does. MINOR goes up when a request gets back or must send something different: a field or header added, dropped or shown under a new condition, a parameter newly required, a new endpoint, a generated sentence reworded. PATCH goes up when only the documents change. Every version is listed, newest first, at https://patentref.io/changes.txt.",
  "contact": {
   "name": "PatentRef",
   "email": "hello@patentref.io",
   "url": "https://patentref.io/"
  },
  "x-logo": {
   "url": "https://patentref.io/brand/logo.png",
   "backgroundColor": "#ffffff",
   "altText": "PatentRef",
   "href": "https://patentref.io/"
  },
  "license": {
   "name": "GPL-3.0 (code); CC BY 4.0 (data)",
   "identifier": "GPL-3.0-only"
  },
  "x-generated-from": "the endpoint contract of the upstream PatentSearch-API (e998bf2) and PatentRef's verdict record schema",
  "x-patentref-changes": "https://patentref.io/changes.txt"
 },
 "servers": [
  {
   "url": "https://patentref.io"
  }
 ],
 "security": [
  {
   "apiKey": []
  }
 ],
 "paths": {
  "/api/v1/assignee/": {
   "get": {
    "operationId": "AssigneeList",
    "summary": "List: assignees",
    "description": "Upstream view AssigneeList (index `assignees`, response key `assignees`). Any field may be null where the bulk data has no value. Default fields (`f`): assignee_id, assignee_individual_name_first, assignee_individual_name_last, assignee_organization. Default sort (`s`): [{\"assignee_id\": \"asc\"}]. Nested groups usable in q and f with dotted names: assignee_years. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "assignees"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssigneeFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssigneeSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssigneeResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "AssigneeListPost",
    "summary": "List: assignees (POST, same parameters in a JSON body)",
    "description": "Upstream view AssigneeList (index `assignees`, response key `assignees`). Any field may be null where the bulk data has no value. Default fields (`f`): assignee_id, assignee_individual_name_first, assignee_individual_name_last, assignee_organization. Default sort (`s`): [{\"assignee_id\": \"asc\"}]. Nested groups usable in q and f with dotted names: assignee_years. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "assignees"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssigneeResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/AssigneeFields"
         },
         "s": {
          "$ref": "#/components/schemas/AssigneeSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/assignee/{pk}/": {
   "get": {
    "operationId": "AssigneeDetail",
    "summary": "Detail: assignees",
    "description": "Upstream view AssigneeDetail (index `assignees`, response key `assignees`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): assignee_id, assignee_individual_name_first, assignee_individual_name_last, assignee_organization. Default sort (`s`): [{\"assignee_id\": \"asc\"}]. Nested groups usable in q and f with dotted names: assignee_years. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "assignees"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (assignee_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssigneeFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssigneeResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "AssigneeDetailPost",
    "summary": "Detail: assignees (POST, same parameters in a JSON body)",
    "description": "Upstream view AssigneeDetail (index `assignees`, response key `assignees`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): assignee_id, assignee_individual_name_first, assignee_individual_name_last, assignee_organization. Default sort (`s`): [{\"assignee_id\": \"asc\"}]. Nested groups usable in q and f with dotted names: assignee_years. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "assignees"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (assignee_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssigneeResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/AssigneeFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/cpc_class/": {
   "get": {
    "operationId": "CPCClassList",
    "summary": "List: cpc_classes",
    "description": "Upstream view CPCClassList (index `cpc_classes`, response key `cpc_classes`). Any field may be null where the bulk data has no value. Default fields (`f`): cpc_class_id, cpc_class_title. Default sort (`s`): [{\"cpc_class_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "cpc_classes"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": false,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Optional on this lookup endpoint.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LookupQuery"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCClassFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCClassSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCClassResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "CPCClassListPost",
    "summary": "List: cpc_classes (POST, same parameters in a JSON body)",
    "description": "Upstream view CPCClassList (index `cpc_classes`, response key `cpc_classes`). Any field may be null where the bulk data has no value. Default fields (`f`): cpc_class_id, cpc_class_title. Default sort (`s`): [{\"cpc_class_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "cpc_classes"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCClassResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/LookupQuery"
         },
         "f": {
          "$ref": "#/components/schemas/CPCClassFields"
         },
         "s": {
          "$ref": "#/components/schemas/CPCClassSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/cpc_class/{pk}/": {
   "get": {
    "operationId": "CPCClassDetail",
    "summary": "Detail: cpc_classes",
    "description": "Upstream view CPCClassDetail (index `cpc_classes`, response key `cpc_classes`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): cpc_class_id, cpc_class_title. Default sort (`s`): [{\"cpc_class_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "cpc_classes"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (cpc_class_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCClassFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCClassResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "CPCClassDetailPost",
    "summary": "Detail: cpc_classes (POST, same parameters in a JSON body)",
    "description": "Upstream view CPCClassDetail (index `cpc_classes`, response key `cpc_classes`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): cpc_class_id, cpc_class_title. Default sort (`s`): [{\"cpc_class_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "cpc_classes"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (cpc_class_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCClassResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/CPCClassFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/cpc_group/": {
   "get": {
    "operationId": "CPCGroupList",
    "summary": "List: cpc_groups",
    "description": "Upstream view CPCGroupList (index `cpc_groups`, response key `cpc_groups`). Any field may be null where the bulk data has no value. Default fields (`f`): cpc_group_id, cpc_group_title, cpc_class_id, cpc_subclass_id. Default sort (`s`): [{\"cpc_group_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "cpc_groups"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": false,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Optional on this lookup endpoint.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LookupQuery"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCGroupLookupFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCGroupLookupSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCGroupLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "CPCGroupListPost",
    "summary": "List: cpc_groups (POST, same parameters in a JSON body)",
    "description": "Upstream view CPCGroupList (index `cpc_groups`, response key `cpc_groups`). Any field may be null where the bulk data has no value. Default fields (`f`): cpc_group_id, cpc_group_title, cpc_class_id, cpc_subclass_id. Default sort (`s`): [{\"cpc_group_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "cpc_groups"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCGroupLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/LookupQuery"
         },
         "f": {
          "$ref": "#/components/schemas/CPCGroupLookupFields"
         },
         "s": {
          "$ref": "#/components/schemas/CPCGroupLookupSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/cpc_group/{pk}/": {
   "get": {
    "operationId": "CPCGroupDetail",
    "summary": "Detail: cpc_groups",
    "description": "Upstream view CPCGroupDetail (index `cpc_groups`, response key `cpc_groups`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): cpc_group_id, cpc_group_title, cpc_class_id, cpc_subclass_id. Default sort (`s`): [{\"cpc_group_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "cpc_groups"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (cpc_group_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCGroupLookupFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCGroupLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "CPCGroupDetailPost",
    "summary": "Detail: cpc_groups (POST, same parameters in a JSON body)",
    "description": "Upstream view CPCGroupDetail (index `cpc_groups`, response key `cpc_groups`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): cpc_group_id, cpc_group_title, cpc_class_id, cpc_subclass_id. Default sort (`s`): [{\"cpc_group_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "cpc_groups"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (cpc_group_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCGroupLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/CPCGroupLookupFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/cpc_subclass/": {
   "get": {
    "operationId": "CPCSubClassList",
    "summary": "List: cpc_subclasses",
    "description": "Upstream view CPCSubClassList (index `cpc_subclasses`, response key `cpc_subclasses`). Any field may be null where the bulk data has no value. Default fields (`f`): cpc_subclass_id, cpc_subclass_title, cpc_class_id. Default sort (`s`): [{\"cpc_subclass_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "cpc_subclasses"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": false,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Optional on this lookup endpoint.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LookupQuery"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCSubClassLookupFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCSubClassLookupSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCSubClassLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "CPCSubClassListPost",
    "summary": "List: cpc_subclasses (POST, same parameters in a JSON body)",
    "description": "Upstream view CPCSubClassList (index `cpc_subclasses`, response key `cpc_subclasses`). Any field may be null where the bulk data has no value. Default fields (`f`): cpc_subclass_id, cpc_subclass_title, cpc_class_id. Default sort (`s`): [{\"cpc_subclass_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "cpc_subclasses"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCSubClassLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/LookupQuery"
         },
         "f": {
          "$ref": "#/components/schemas/CPCSubClassLookupFields"
         },
         "s": {
          "$ref": "#/components/schemas/CPCSubClassLookupSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/cpc_subclass/{pk}/": {
   "get": {
    "operationId": "CPCSubClassDetail",
    "summary": "Detail: cpc_subclasses",
    "description": "Upstream view CPCSubClassDetail (index `cpc_subclasses`, response key `cpc_subclasses`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): cpc_subclass_id, cpc_subclass_title, cpc_class_id. Default sort (`s`): [{\"cpc_subclass_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "cpc_subclasses"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (cpc_subclass_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCSubClassLookupFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCSubClassLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "CPCSubClassDetailPost",
    "summary": "Detail: cpc_subclasses (POST, same parameters in a JSON body)",
    "description": "Upstream view CPCSubClassDetail (index `cpc_subclasses`, response key `cpc_subclasses`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): cpc_subclass_id, cpc_subclass_title, cpc_class_id. Default sort (`s`): [{\"cpc_subclass_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "cpc_subclasses"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (cpc_subclass_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CPCSubClassLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/CPCSubClassLookupFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/g_brf_sum_text/": {
   "get": {
    "operationId": "GBrfSumTextList",
    "summary": "List: g_brf_sum_texts",
    "description": "Upstream view GBrfSumTextList (index `g_brf_sum_texts`, response key `g_brf_sum_texts`). Long text of granted patents, served since 2026-10-08 from the long-text build 20261006.4; GET /api/v1/meta/health/ shows text_data_version. The last grant date covered is 2025-12-30 in all four long-text endpoints: claims, brief summaries and drawing descriptions of patents granted 1976 to 2025-12-30, detailed descriptions of 2005 to 2025-12-30. Patents granted after 2025-12-30 (the weekly grants) have no long text yet and answer 0 rows here. Search it with _text_all, _text_any or _text_phrase. _contains matches within one word (a needle with a space answers 0 rows); _contains with a one-word needle, a range or an empty _begins on the text field answers 400 ERR_Q unless patent_id (up to 1,000 values) is in the same _and, since no index serves it. A query that matches nearly every row (_neq on patent_id) answers at once. The endpoint answers 501 ERR_NOT_IMPLEMENTED only when no long-text file is in service. The long text comes from its own file: X-Data-Version on these answers names the build of the main search file, and X-Text-Data-Version (the same value as text_data_version in GET /api/v1/meta/health/) names the long-text file; cache long text under X-Text-Data-Version. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, summary_text. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}.",
    "tags": [
     "g_brf_sum_texts"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GBrfSumTextFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GBrfSumTextSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       },
       "X-Text-Data-Version": {
        "$ref": "#/components/headers/X-Text-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GBrfSumTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "GBrfSumTextListPost",
    "summary": "List: g_brf_sum_texts (POST, same parameters in a JSON body)",
    "description": "Upstream view GBrfSumTextList (index `g_brf_sum_texts`, response key `g_brf_sum_texts`). Long text of granted patents, served since 2026-10-08 from the long-text build 20261006.4; GET /api/v1/meta/health/ shows text_data_version. The last grant date covered is 2025-12-30 in all four long-text endpoints: claims, brief summaries and drawing descriptions of patents granted 1976 to 2025-12-30, detailed descriptions of 2005 to 2025-12-30. Patents granted after 2025-12-30 (the weekly grants) have no long text yet and answer 0 rows here. Search it with _text_all, _text_any or _text_phrase. _contains matches within one word (a needle with a space answers 0 rows); _contains with a one-word needle, a range or an empty _begins on the text field answers 400 ERR_Q unless patent_id (up to 1,000 values) is in the same _and, since no index serves it. A query that matches nearly every row (_neq on patent_id) answers at once. The endpoint answers 501 ERR_NOT_IMPLEMENTED only when no long-text file is in service. The long text comes from its own file: X-Data-Version on these answers names the build of the main search file, and X-Text-Data-Version (the same value as text_data_version in GET /api/v1/meta/health/) names the long-text file; cache long text under X-Text-Data-Version. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, summary_text. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}.",
    "tags": [
     "g_brf_sum_texts"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       },
       "X-Text-Data-Version": {
        "$ref": "#/components/headers/X-Text-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GBrfSumTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/GBrfSumTextFields"
         },
         "s": {
          "$ref": "#/components/schemas/GBrfSumTextSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/g_claim/": {
   "get": {
    "operationId": "GClaimList",
    "summary": "List: g_claims",
    "description": "Upstream view GClaimList (index `g_claims`, response key `g_claims`). Long text of granted patents, served since 2026-10-08 from the long-text build 20261006.4; GET /api/v1/meta/health/ shows text_data_version. The last grant date covered is 2025-12-30 in all four long-text endpoints: claims, brief summaries and drawing descriptions of patents granted 1976 to 2025-12-30, detailed descriptions of 2005 to 2025-12-30. Patents granted after 2025-12-30 (the weekly grants) have no long text yet and answer 0 rows here. Search it with _text_all, _text_any or _text_phrase. _contains matches within one word (a needle with a space answers 0 rows); _contains with a one-word needle, a range or an empty _begins on the text field answers 400 ERR_Q unless patent_id (up to 1,000 values) is in the same _and, since no index serves it. A query that matches nearly every row (_neq on patent_id) answers at once. The endpoint answers 501 ERR_NOT_IMPLEMENTED only when no long-text file is in service. The long text comes from its own file: X-Data-Version on these answers names the build of the main search file, and X-Text-Data-Version (the same value as text_data_version in GET /api/v1/meta/health/) names the long-text file; cache long text under X-Text-Data-Version. claim_sequence counts from 0 (claim 1 is claim_sequence 0); claim_number is the printed number as five digits (\"00001\"); claim_dependent is null for an independent claim and names the parent (\"claim 1\") for a dependent one; exemplary is \"1\" for the exemplary claim and \"0\" otherwise. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, claim_sequence, claim_text. Default sort (`s`): [{\"patent_id\": \"asc\"}, {\"claim_sequence\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}.",
    "tags": [
     "g_claims"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GClaimFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GClaimSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       },
       "X-Text-Data-Version": {
        "$ref": "#/components/headers/X-Text-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GClaimResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "GClaimListPost",
    "summary": "List: g_claims (POST, same parameters in a JSON body)",
    "description": "Upstream view GClaimList (index `g_claims`, response key `g_claims`). Long text of granted patents, served since 2026-10-08 from the long-text build 20261006.4; GET /api/v1/meta/health/ shows text_data_version. The last grant date covered is 2025-12-30 in all four long-text endpoints: claims, brief summaries and drawing descriptions of patents granted 1976 to 2025-12-30, detailed descriptions of 2005 to 2025-12-30. Patents granted after 2025-12-30 (the weekly grants) have no long text yet and answer 0 rows here. Search it with _text_all, _text_any or _text_phrase. _contains matches within one word (a needle with a space answers 0 rows); _contains with a one-word needle, a range or an empty _begins on the text field answers 400 ERR_Q unless patent_id (up to 1,000 values) is in the same _and, since no index serves it. A query that matches nearly every row (_neq on patent_id) answers at once. The endpoint answers 501 ERR_NOT_IMPLEMENTED only when no long-text file is in service. The long text comes from its own file: X-Data-Version on these answers names the build of the main search file, and X-Text-Data-Version (the same value as text_data_version in GET /api/v1/meta/health/) names the long-text file; cache long text under X-Text-Data-Version. claim_sequence counts from 0 (claim 1 is claim_sequence 0); claim_number is the printed number as five digits (\"00001\"); claim_dependent is null for an independent claim and names the parent (\"claim 1\") for a dependent one; exemplary is \"1\" for the exemplary claim and \"0\" otherwise. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, claim_sequence, claim_text. Default sort (`s`): [{\"patent_id\": \"asc\"}, {\"claim_sequence\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}.",
    "tags": [
     "g_claims"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       },
       "X-Text-Data-Version": {
        "$ref": "#/components/headers/X-Text-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GClaimResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/GClaimFields"
         },
         "s": {
          "$ref": "#/components/schemas/GClaimSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/g_detail_desc_text/": {
   "get": {
    "operationId": "GDetailDescTextList",
    "summary": "List: g_detail_desc_texts",
    "description": "Upstream view GDetailDescTextList (index `g_detail_desc_texts`, response key `g_detail_desc_texts`). Long text of granted patents, served since 2026-10-08 from the long-text build 20261006.4; GET /api/v1/meta/health/ shows text_data_version. The last grant date covered is 2025-12-30 in all four long-text endpoints: claims, brief summaries and drawing descriptions of patents granted 1976 to 2025-12-30, detailed descriptions of 2005 to 2025-12-30. Patents granted after 2025-12-30 (the weekly grants) have no long text yet and answer 0 rows here. Search it with _text_all, _text_any or _text_phrase. _contains matches within one word (a needle with a space answers 0 rows); _contains with a one-word needle, a range or an empty _begins on the text field answers 400 ERR_Q unless patent_id (up to 1,000 values) is in the same _and, since no index serves it. A query that matches nearly every row (_neq on patent_id) answers at once. The endpoint answers 501 ERR_NOT_IMPLEMENTED only when no long-text file is in service. The long text comes from its own file: X-Data-Version on these answers names the build of the main search file, and X-Text-Data-Version (the same value as text_data_version in GET /api/v1/meta/health/) names the long-text file; cache long text under X-Text-Data-Version. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, description_text. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}.",
    "tags": [
     "g_detail_desc_texts"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GDetailDescTextFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GDetailDescTextSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       },
       "X-Text-Data-Version": {
        "$ref": "#/components/headers/X-Text-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GDetailDescTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "GDetailDescTextListPost",
    "summary": "List: g_detail_desc_texts (POST, same parameters in a JSON body)",
    "description": "Upstream view GDetailDescTextList (index `g_detail_desc_texts`, response key `g_detail_desc_texts`). Long text of granted patents, served since 2026-10-08 from the long-text build 20261006.4; GET /api/v1/meta/health/ shows text_data_version. The last grant date covered is 2025-12-30 in all four long-text endpoints: claims, brief summaries and drawing descriptions of patents granted 1976 to 2025-12-30, detailed descriptions of 2005 to 2025-12-30. Patents granted after 2025-12-30 (the weekly grants) have no long text yet and answer 0 rows here. Search it with _text_all, _text_any or _text_phrase. _contains matches within one word (a needle with a space answers 0 rows); _contains with a one-word needle, a range or an empty _begins on the text field answers 400 ERR_Q unless patent_id (up to 1,000 values) is in the same _and, since no index serves it. A query that matches nearly every row (_neq on patent_id) answers at once. The endpoint answers 501 ERR_NOT_IMPLEMENTED only when no long-text file is in service. The long text comes from its own file: X-Data-Version on these answers names the build of the main search file, and X-Text-Data-Version (the same value as text_data_version in GET /api/v1/meta/health/) names the long-text file; cache long text under X-Text-Data-Version. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, description_text. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}.",
    "tags": [
     "g_detail_desc_texts"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       },
       "X-Text-Data-Version": {
        "$ref": "#/components/headers/X-Text-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GDetailDescTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/GDetailDescTextFields"
         },
         "s": {
          "$ref": "#/components/schemas/GDetailDescTextSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/g_draw_desc_text/": {
   "get": {
    "operationId": "GDrawDescTextList",
    "summary": "List: g_draw_desc_texts",
    "description": "Upstream view GDrawDescTextList (index `g_draw_desc_texts`, response key `g_draw_desc_texts`). Long text of granted patents, served since 2026-10-08 from the long-text build 20261006.4; GET /api/v1/meta/health/ shows text_data_version. The last grant date covered is 2025-12-30 in all four long-text endpoints: claims, brief summaries and drawing descriptions of patents granted 1976 to 2025-12-30, detailed descriptions of 2005 to 2025-12-30. Patents granted after 2025-12-30 (the weekly grants) have no long text yet and answer 0 rows here. Search it with _text_all, _text_any or _text_phrase. _contains matches within one word (a needle with a space answers 0 rows); _contains with a one-word needle, a range or an empty _begins on the text field answers 400 ERR_Q unless patent_id (up to 1,000 values) is in the same _and, since no index serves it. A query that matches nearly every row (_neq on patent_id) answers at once. The endpoint answers 501 ERR_NOT_IMPLEMENTED only when no long-text file is in service. The long text comes from its own file: X-Data-Version on these answers names the build of the main search file, and X-Text-Data-Version (the same value as text_data_version in GET /api/v1/meta/health/) names the long-text file; cache long text under X-Text-Data-Version. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, draw_desc_sequence, draw_desc_text. Default sort (`s`): [{\"patent_id\": \"asc\"}, {\"draw_desc_sequence\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}.",
    "tags": [
     "g_draw_desc_texts"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GDrawDescTextFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GDrawDescTextSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       },
       "X-Text-Data-Version": {
        "$ref": "#/components/headers/X-Text-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GDrawDescTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "GDrawDescTextListPost",
    "summary": "List: g_draw_desc_texts (POST, same parameters in a JSON body)",
    "description": "Upstream view GDrawDescTextList (index `g_draw_desc_texts`, response key `g_draw_desc_texts`). Long text of granted patents, served since 2026-10-08 from the long-text build 20261006.4; GET /api/v1/meta/health/ shows text_data_version. The last grant date covered is 2025-12-30 in all four long-text endpoints: claims, brief summaries and drawing descriptions of patents granted 1976 to 2025-12-30, detailed descriptions of 2005 to 2025-12-30. Patents granted after 2025-12-30 (the weekly grants) have no long text yet and answer 0 rows here. Search it with _text_all, _text_any or _text_phrase. _contains matches within one word (a needle with a space answers 0 rows); _contains with a one-word needle, a range or an empty _begins on the text field answers 400 ERR_Q unless patent_id (up to 1,000 values) is in the same _and, since no index serves it. A query that matches nearly every row (_neq on patent_id) answers at once. The endpoint answers 501 ERR_NOT_IMPLEMENTED only when no long-text file is in service. The long text comes from its own file: X-Data-Version on these answers names the build of the main search file, and X-Text-Data-Version (the same value as text_data_version in GET /api/v1/meta/health/) names the long-text file; cache long text under X-Text-Data-Version. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, draw_desc_sequence, draw_desc_text. Default sort (`s`): [{\"patent_id\": \"asc\"}, {\"draw_desc_sequence\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}.",
    "tags": [
     "g_draw_desc_texts"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       },
       "X-Text-Data-Version": {
        "$ref": "#/components/headers/X-Text-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/GDrawDescTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/GDrawDescTextFields"
         },
         "s": {
          "$ref": "#/components/schemas/GDrawDescTextSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/inventor/": {
   "get": {
    "operationId": "InventorList",
    "summary": "List: inventors",
    "description": "Upstream view InventorList (index `inventors`, response key `inventors`). Any field may be null where the bulk data has no value. Default fields (`f`): inventor_id, inventor_name_first, inventor_name_last. Default sort (`s`): [{\"inventor_id\": \"asc\"}]. Nested groups usable in q and f with dotted names: inventor_years. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "inventors"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/InventorFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/InventorSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/InventorResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "InventorListPost",
    "summary": "List: inventors (POST, same parameters in a JSON body)",
    "description": "Upstream view InventorList (index `inventors`, response key `inventors`). Any field may be null where the bulk data has no value. Default fields (`f`): inventor_id, inventor_name_first, inventor_name_last. Default sort (`s`): [{\"inventor_id\": \"asc\"}]. Nested groups usable in q and f with dotted names: inventor_years. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "inventors"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/InventorResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/InventorFields"
         },
         "s": {
          "$ref": "#/components/schemas/InventorSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/inventor/{pk}/": {
   "get": {
    "operationId": "InventorDetail",
    "summary": "Detail: inventors",
    "description": "Upstream view InventorDetail (index `inventors`, response key `inventors`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): inventor_id, inventor_name_first, inventor_name_last. Default sort (`s`): [{\"inventor_id\": \"asc\"}]. Nested groups usable in q and f with dotted names: inventor_years. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "inventors"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (inventor_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/InventorFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/InventorResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "InventorDetailPost",
    "summary": "Detail: inventors (POST, same parameters in a JSON body)",
    "description": "Upstream view InventorDetail (index `inventors`, response key `inventors`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): inventor_id, inventor_name_first, inventor_name_last. Default sort (`s`): [{\"inventor_id\": \"asc\"}]. Nested groups usable in q and f with dotted names: inventor_years. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "inventors"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (inventor_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/InventorResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/InventorFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/ipc/": {
   "get": {
    "operationId": "IPCRList",
    "summary": "List: ipcr",
    "description": "Upstream view IPCRList (index `ipcr`, response key `ipcr`). Any field may be null where the bulk data has no value. Default fields (`f`): ipc_id, ipc_section, ipc_class, ipc_subclass. Default sort (`s`): [{\"ipc_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "ipcr"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": false,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Optional on this lookup endpoint.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LookupQuery"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/IPCRFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/IPCRSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/IPCRResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "IPCRListPost",
    "summary": "List: ipcr (POST, same parameters in a JSON body)",
    "description": "Upstream view IPCRList (index `ipcr`, response key `ipcr`). Any field may be null where the bulk data has no value. Default fields (`f`): ipc_id, ipc_section, ipc_class, ipc_subclass. Default sort (`s`): [{\"ipc_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "ipcr"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/IPCRResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/LookupQuery"
         },
         "f": {
          "$ref": "#/components/schemas/IPCRFields"
         },
         "s": {
          "$ref": "#/components/schemas/IPCRSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/location/": {
   "get": {
    "operationId": "LocationList",
    "summary": "List: locations",
    "description": "Upstream view LocationList (index `locations`, response key `locations`). Any field may be null where the bulk data has no value. Default fields (`f`): location_id, location_name, location_state, location_country. Default sort (`s`): [{\"location_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "locations"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LocationFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LocationSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LocationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "LocationListPost",
    "summary": "List: locations (POST, same parameters in a JSON body)",
    "description": "Upstream view LocationList (index `locations`, response key `locations`). Any field may be null where the bulk data has no value. Default fields (`f`): location_id, location_name, location_state, location_country. Default sort (`s`): [{\"location_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "locations"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LocationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/LocationFields"
         },
         "s": {
          "$ref": "#/components/schemas/LocationSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/location/{pk}/": {
   "get": {
    "operationId": "LocationDetail",
    "summary": "Detail: locations",
    "description": "Upstream view LocationDetail (index `locations`, response key `locations`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): location_id, location_name, location_state, location_country. Default sort (`s`): [{\"location_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "locations"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (location_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LocationFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LocationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "LocationDetailPost",
    "summary": "Detail: locations (POST, same parameters in a JSON body)",
    "description": "Upstream view LocationDetail (index `locations`, response key `locations`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): location_id, location_name, location_state, location_country. Default sort (`s`): [{\"location_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "locations"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (location_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LocationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/LocationFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/nber_category/": {
   "get": {
    "operationId": "NBERCategoryList",
    "summary": "List: nber_categories",
    "description": "Upstream view NBERCategoryList (index `nber_categories`, response key `nber_categories`). Dead upstream route: no data set exists behind it, upstream or here; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): nber_category_id, nber_category_title. Default sort (`s`): [{\"nber_category_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record.",
    "tags": [
     "nber_categories"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": false,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Optional on this lookup endpoint.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LookupQuery"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERCategoryLookupFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERCategoryLookupSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERCategoryLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    },
    "x-patentref-deferred": "dead upstream route, no data set"
   },
   "post": {
    "operationId": "NBERCategoryListPost",
    "summary": "List: nber_categories (POST, same parameters in a JSON body)",
    "description": "Upstream view NBERCategoryList (index `nber_categories`, response key `nber_categories`). Dead upstream route: no data set exists behind it, upstream or here; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): nber_category_id, nber_category_title. Default sort (`s`): [{\"nber_category_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record.",
    "tags": [
     "nber_categories"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERCategoryLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "x-patentref-deferred": "dead upstream route, no data set",
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/LookupQuery"
         },
         "f": {
          "$ref": "#/components/schemas/NBERCategoryLookupFields"
         },
         "s": {
          "$ref": "#/components/schemas/NBERCategoryLookupSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/nber_category/{pk}/": {
   "get": {
    "operationId": "NBERCategoryDetail",
    "summary": "Detail: nber_categories",
    "description": "Upstream view NBERCategoryDetail (index `nber_categories`, response key `nber_categories`). Dead upstream route: no data set exists behind it, upstream or here; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): nber_category_id, nber_category_title. Default sort (`s`): [{\"nber_category_id\": \"asc\"}].",
    "tags": [
     "nber_categories"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (nber_category_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERCategoryLookupFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERCategoryLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    },
    "x-patentref-deferred": "dead upstream route, no data set"
   },
   "post": {
    "operationId": "NBERCategoryDetailPost",
    "summary": "Detail: nber_categories (POST, same parameters in a JSON body)",
    "description": "Upstream view NBERCategoryDetail (index `nber_categories`, response key `nber_categories`). Dead upstream route: no data set exists behind it, upstream or here; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): nber_category_id, nber_category_title. Default sort (`s`): [{\"nber_category_id\": \"asc\"}].",
    "tags": [
     "nber_categories"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (nber_category_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERCategoryLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "x-patentref-deferred": "dead upstream route, no data set",
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/NBERCategoryLookupFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/nber_subcategory/": {
   "get": {
    "operationId": "NBERSubCategoryList",
    "summary": "List: nber_subcategories",
    "description": "Upstream view NBERSubCategoryList (index `nber_subcategories`, response key `nber_subcategories`). Dead upstream route: no data set exists behind it, upstream or here; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): nber_subcategory_id, nber_subcategory_title, nber_category_id. Default sort (`s`): [{\"nber_subcategory_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record.",
    "tags": [
     "nber_subcategories"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": false,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Optional on this lookup endpoint.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LookupQuery"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERSubcategoryLookupFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERSubcategoryLookupSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERSubcategoryLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    },
    "x-patentref-deferred": "dead upstream route, no data set"
   },
   "post": {
    "operationId": "NBERSubCategoryListPost",
    "summary": "List: nber_subcategories (POST, same parameters in a JSON body)",
    "description": "Upstream view NBERSubCategoryList (index `nber_subcategories`, response key `nber_subcategories`). Dead upstream route: no data set exists behind it, upstream or here; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): nber_subcategory_id, nber_subcategory_title, nber_category_id. Default sort (`s`): [{\"nber_subcategory_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record.",
    "tags": [
     "nber_subcategories"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERSubcategoryLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "x-patentref-deferred": "dead upstream route, no data set",
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/LookupQuery"
         },
         "f": {
          "$ref": "#/components/schemas/NBERSubcategoryLookupFields"
         },
         "s": {
          "$ref": "#/components/schemas/NBERSubcategoryLookupSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/nber_subcategory/{pk}/": {
   "get": {
    "operationId": "NBERSubCategoryDetail",
    "summary": "Detail: nber_subcategories",
    "description": "Upstream view NBERSubCategoryDetail (index `nber_subcategories`, response key `nber_subcategories`). Dead upstream route: no data set exists behind it, upstream or here; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): nber_subcategory_id, nber_subcategory_title, nber_category_id. Default sort (`s`): [{\"nber_subcategory_id\": \"asc\"}].",
    "tags": [
     "nber_subcategories"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (nber_subcategory_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERSubcategoryLookupFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERSubcategoryLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    },
    "x-patentref-deferred": "dead upstream route, no data set"
   },
   "post": {
    "operationId": "NBERSubCategoryDetailPost",
    "summary": "Detail: nber_subcategories (POST, same parameters in a JSON body)",
    "description": "Upstream view NBERSubCategoryDetail (index `nber_subcategories`, response key `nber_subcategories`). Dead upstream route: no data set exists behind it, upstream or here; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): nber_subcategory_id, nber_subcategory_title, nber_category_id. Default sort (`s`): [{\"nber_subcategory_id\": \"asc\"}].",
    "tags": [
     "nber_subcategories"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (nber_subcategory_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NBERSubcategoryLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "x-patentref-deferred": "dead upstream route, no data set",
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/NBERSubcategoryLookupFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/patent/": {
   "get": {
    "operationId": "PatentList",
    "summary": "List: patents",
    "description": "Upstream view PatentList (index `patents`, response key `patents`). Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, patent_title, patent_date. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Nested groups usable in q and f with dotted names: applicants, application, assignees, attorneys, botanic, cpc_at_issue, cpc_current, examiners, figures, foreign_priority, gov_interest_contract_award_numbers, gov_interest_organizations, granted_pregrant_crosswalk, inventors, ipcr, pct_data, us_related_documents, us_term_of_grant, uspc_at_issue, wipo. Default options (`o`): {\"pad_patent_id\": false, \"exclude_withdrawn\": true}.",
    "tags": [
     "patents"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PatentFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PatentSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PatentResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     }
    }
   },
   "post": {
    "operationId": "PatentListPost",
    "summary": "List: patents (POST, same parameters in a JSON body)",
    "description": "Upstream view PatentList (index `patents`, response key `patents`). Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, patent_title, patent_date. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Nested groups usable in q and f with dotted names: applicants, application, assignees, attorneys, botanic, cpc_at_issue, cpc_current, examiners, figures, foreign_priority, gov_interest_contract_award_numbers, gov_interest_organizations, granted_pregrant_crosswalk, inventors, ipcr, pct_data, us_related_documents, us_term_of_grant, uspc_at_issue, wipo. Default options (`o`): {\"pad_patent_id\": false, \"exclude_withdrawn\": true}.",
    "tags": [
     "patents"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PatentResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/PatentFields"
         },
         "s": {
          "$ref": "#/components/schemas/PatentSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/patent/{pk}/": {
   "get": {
    "operationId": "PatentDetail",
    "summary": "Detail: patents",
    "description": "Upstream view PatentDetail (index `patents`, response key `patents`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. A withdrawn patent's detail route answers 200 whatever o.exclude_withdrawn says; only the list route hides withdrawn patents. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, patent_title, patent_date. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Nested groups usable in q and f with dotted names: applicants, application, assignees, attorneys, botanic, cpc_at_issue, cpc_current, examiners, figures, foreign_priority, gov_interest_contract_award_numbers, gov_interest_organizations, granted_pregrant_crosswalk, inventors, ipcr, pct_data, us_related_documents, us_term_of_grant, uspc_at_issue, wipo. Default options (`o`): {\"pad_patent_id\": false, \"exclude_withdrawn\": true}.",
    "tags": [
     "patents"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (patent_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PatentFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PatentResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    }
   },
   "post": {
    "operationId": "PatentDetailPost",
    "summary": "Detail: patents (POST, same parameters in a JSON body)",
    "description": "Upstream view PatentDetail (index `patents`, response key `patents`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. A withdrawn patent's detail route answers 200 whatever o.exclude_withdrawn says; only the list route hides withdrawn patents. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, patent_title, patent_date. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Nested groups usable in q and f with dotted names: applicants, application, assignees, attorneys, botanic, cpc_at_issue, cpc_current, examiners, figures, foreign_priority, gov_interest_contract_award_numbers, gov_interest_organizations, granted_pregrant_crosswalk, inventors, ipcr, pct_data, us_related_documents, us_term_of_grant, uspc_at_issue, wipo. Default options (`o`): {\"pad_patent_id\": false, \"exclude_withdrawn\": true}.",
    "tags": [
     "patents"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (patent_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PatentResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/PatentFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/patent/attorney/": {
   "get": {
    "operationId": "AttorneyList",
    "summary": "List: attorneys",
    "description": "Upstream view AttorneyList (index `attorneys`, response key `attorneys`). Any field may be null where the bulk data has no value. Default fields (`f`): attorney_id, attorney_name_first, attorney_name_last, attorney_organization. Default sort (`s`): [{\"attorney_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "attorneys"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AttorneyFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AttorneySort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AttorneyResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "AttorneyListPost",
    "summary": "List: attorneys (POST, same parameters in a JSON body)",
    "description": "Upstream view AttorneyList (index `attorneys`, response key `attorneys`). Any field may be null where the bulk data has no value. Default fields (`f`): attorney_id, attorney_name_first, attorney_name_last, attorney_organization. Default sort (`s`): [{\"attorney_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "attorneys"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AttorneyResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/AttorneyFields"
         },
         "s": {
          "$ref": "#/components/schemas/AttorneySort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/patent/attorney/{pk}/": {
   "get": {
    "operationId": "AttorneyDetail",
    "summary": "Detail: attorneys",
    "description": "Upstream view AttorneyDetail (index `attorneys`, response key `attorneys`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): attorney_id, attorney_name_first, attorney_name_last, attorney_organization. Default sort (`s`): [{\"attorney_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "attorneys"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (attorney_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AttorneyFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AttorneyResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "AttorneyDetailPost",
    "summary": "Detail: attorneys (POST, same parameters in a JSON body)",
    "description": "Upstream view AttorneyDetail (index `attorneys`, response key `attorneys`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): attorney_id, attorney_name_first, attorney_name_last, attorney_organization. Default sort (`s`): [{\"attorney_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "attorneys"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (attorney_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AttorneyResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/AttorneyFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/patent/foreign_citation/": {
   "get": {
    "operationId": "ForeignCitationList",
    "summary": "List: foreign_citations",
    "description": "Upstream view ForeignCitationList (index `foreign_citations`, response key `foreign_citations`). Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, citation_sequence, citation_number. Default sort (`s`): [{\"patent_id\": \"asc\", \"citation_sequence\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "foreign_citations"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ForeignCitationFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ForeignCitationSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ForeignCitationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "ForeignCitationListPost",
    "summary": "List: foreign_citations (POST, same parameters in a JSON body)",
    "description": "Upstream view ForeignCitationList (index `foreign_citations`, response key `foreign_citations`). Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, citation_sequence, citation_number. Default sort (`s`): [{\"patent_id\": \"asc\", \"citation_sequence\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "foreign_citations"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ForeignCitationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/ForeignCitationFields"
         },
         "s": {
          "$ref": "#/components/schemas/ForeignCitationSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/patent/other_reference/": {
   "get": {
    "operationId": "OtherReferenceList",
    "summary": "List: other_references",
    "description": "Upstream view OtherReferenceList (index `other_references`, response key `other_references`). Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, reference_sequence, reference_text. Default sort (`s`): [{\"patent_id\": \"asc\", \"reference_sequence\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. Also answered at /api/v1/patent/otherreference/, the path upstream used before its release 2.2.0 (2024-11-06) and the one the PatentsView code examples notebook names: the same answer, GET and POST, with or without the trailing slash. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "other_references"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/OtherReferenceFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/OtherReferenceSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/OtherReferenceResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    },
    "x-patentref-aliases": [
     "/api/v1/patent/otherreference/"
    ]
   },
   "post": {
    "operationId": "OtherReferenceListPost",
    "summary": "List: other_references (POST, same parameters in a JSON body)",
    "description": "Upstream view OtherReferenceList (index `other_references`, response key `other_references`). Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, reference_sequence, reference_text. Default sort (`s`): [{\"patent_id\": \"asc\", \"reference_sequence\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. Also answered at /api/v1/patent/otherreference/, the path upstream used before its release 2.2.0 (2024-11-06) and the one the PatentsView code examples notebook names: the same answer, GET and POST, with or without the trailing slash. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "other_references"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/OtherReferenceResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "x-patentref-aliases": [
     "/api/v1/patent/otherreference/"
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/OtherReferenceFields"
         },
         "s": {
          "$ref": "#/components/schemas/OtherReferenceSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/patent/rel_app_text/": {
   "get": {
    "operationId": "RelatedTextList",
    "summary": "List: rel_app_texts",
    "description": "Upstream view RelatedTextList (index `rel_app_text`, response key `rel_app_texts`). Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, related_text. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "rel_app_texts"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RelatedTextFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RelatedTextSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RelatedTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "RelatedTextListPost",
    "summary": "List: rel_app_texts (POST, same parameters in a JSON body)",
    "description": "Upstream view RelatedTextList (index `rel_app_text`, response key `rel_app_texts`). Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, related_text. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "rel_app_texts"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RelatedTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/RelatedTextFields"
         },
         "s": {
          "$ref": "#/components/schemas/RelatedTextSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/patent/us_application_citation/": {
   "get": {
    "operationId": "USApplicationCitationList",
    "summary": "List: us_application_citations",
    "description": "Upstream view USApplicationCitationList (index `us_application_citations`, response key `us_application_citations`). Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, citation_document_number, citation_sequence. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "us_application_citations"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USApplicationCitationFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USApplicationCitationSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USApplicationCitationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "USApplicationCitationListPost",
    "summary": "List: us_application_citations (POST, same parameters in a JSON body)",
    "description": "Upstream view USApplicationCitationList (index `us_application_citations`, response key `us_application_citations`). Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, citation_document_number, citation_sequence. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "us_application_citations"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USApplicationCitationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/USApplicationCitationFields"
         },
         "s": {
          "$ref": "#/components/schemas/USApplicationCitationSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/patent/us_application_citation/{pk}/": {
   "get": {
    "operationId": "USApplicationCitationDetail",
    "summary": "Detail: us_application_citations",
    "description": "Upstream view USApplicationCitationDetail (index `us_application_citations`, response key `us_application_citations`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, citation_document_number, citation_sequence. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "us_application_citations"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (patent_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USApplicationCitationFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USApplicationCitationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "USApplicationCitationDetailPost",
    "summary": "Detail: us_application_citations (POST, same parameters in a JSON body)",
    "description": "Upstream view USApplicationCitationDetail (index `us_application_citations`, response key `us_application_citations`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, citation_document_number, citation_sequence. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "us_application_citations"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (patent_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USApplicationCitationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/USApplicationCitationFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/patent/us_patent_citation/": {
   "get": {
    "operationId": "USPatentCitationList",
    "summary": "List: us_patent_citations",
    "description": "Upstream view USPatentCitationList (index `us_patent_citations`, response key `us_patent_citations`). Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, citation_patent_id, citation_date. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "us_patent_citations"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPatentCitationFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPatentCitationSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPatentCitationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "USPatentCitationListPost",
    "summary": "List: us_patent_citations (POST, same parameters in a JSON body)",
    "description": "Upstream view USPatentCitationList (index `us_patent_citations`, response key `us_patent_citations`). Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, citation_patent_id, citation_date. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "us_patent_citations"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPatentCitationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/USPatentCitationFields"
         },
         "s": {
          "$ref": "#/components/schemas/USPatentCitationSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/patent/us_patent_citation/{pk}/": {
   "get": {
    "operationId": "USPatentCitationDetail",
    "summary": "Detail: us_patent_citations",
    "description": "Upstream view USPatentCitationDetail (index `us_patent_citations`, response key `us_patent_citations`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, citation_patent_id, citation_date. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "us_patent_citations"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (patent_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPatentCitationFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPatentCitationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "USPatentCitationDetailPost",
    "summary": "Detail: us_patent_citations (POST, same parameters in a JSON body)",
    "description": "Upstream view USPatentCitationDetail (index `us_patent_citations`, response key `us_patent_citations`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): patent_id, citation_patent_id, citation_date. Default sort (`s`): [{\"patent_id\": \"asc\"}]. Default options (`o`): {\"pad_patent_id\": false}. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "us_patent_citations"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (patent_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPatentCitationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/USPatentCitationFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/pg_brf_sum_text/": {
   "get": {
    "operationId": "PGBrfSumTextList",
    "summary": "List: pg_brf_sum_texts",
    "description": "Upstream view PGBrfSumTextList (index `pg_brf_sum_texts`, response key `pg_brf_sum_texts`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, summary_text. Default sort (`s`): [{\"document_number\": \"asc\"}].",
    "tags": [
     "pg_brf_sum_texts"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGBrfSumTextFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGBrfSumTextSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGBrfSumTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet"
   },
   "post": {
    "operationId": "PGBrfSumTextListPost",
    "summary": "List: pg_brf_sum_texts (POST, same parameters in a JSON body)",
    "description": "Upstream view PGBrfSumTextList (index `pg_brf_sum_texts`, response key `pg_brf_sum_texts`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, summary_text. Default sort (`s`): [{\"document_number\": \"asc\"}].",
    "tags": [
     "pg_brf_sum_texts"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGBrfSumTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/PGBrfSumTextFields"
         },
         "s": {
          "$ref": "#/components/schemas/PGBrfSumTextSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/pg_claim/": {
   "get": {
    "operationId": "PGClaimList",
    "summary": "List: pg_claims",
    "description": "Upstream view PGClaimList (index `pg_claims`, response key `pg_claims`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, claim_sequence, claim_text. Default sort (`s`): [{\"document_number\": \"asc\"}, {\"claim_sequence\": \"asc\"}].",
    "tags": [
     "pg_claims"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGClaimFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGClaimSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGClaimResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet"
   },
   "post": {
    "operationId": "PGClaimListPost",
    "summary": "List: pg_claims (POST, same parameters in a JSON body)",
    "description": "Upstream view PGClaimList (index `pg_claims`, response key `pg_claims`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, claim_sequence, claim_text. Default sort (`s`): [{\"document_number\": \"asc\"}, {\"claim_sequence\": \"asc\"}].",
    "tags": [
     "pg_claims"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGClaimResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/PGClaimFields"
         },
         "s": {
          "$ref": "#/components/schemas/PGClaimSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/pg_detail_desc_text/": {
   "get": {
    "operationId": "PGDetailDescTextList",
    "summary": "List: pg_detail_desc_texts",
    "description": "Upstream view PGDetailDescTextList (index `pg_detail_desc_texts`, response key `pg_detail_desc_texts`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, description_text. Default sort (`s`): [{\"document_number\": \"asc\"}].",
    "tags": [
     "pg_detail_desc_texts"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGDetailDescTextFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGDetailDescTextSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGDetailDescTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet"
   },
   "post": {
    "operationId": "PGDetailDescTextListPost",
    "summary": "List: pg_detail_desc_texts (POST, same parameters in a JSON body)",
    "description": "Upstream view PGDetailDescTextList (index `pg_detail_desc_texts`, response key `pg_detail_desc_texts`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, description_text. Default sort (`s`): [{\"document_number\": \"asc\"}].",
    "tags": [
     "pg_detail_desc_texts"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGDetailDescTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/PGDetailDescTextFields"
         },
         "s": {
          "$ref": "#/components/schemas/PGDetailDescTextSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/pg_draw_desc_text/": {
   "get": {
    "operationId": "PGDrawDescTextList",
    "summary": "List: pg_draw_desc_texts",
    "description": "Upstream view PGDrawDescTextList (index `pg_draw_desc_texts`, response key `pg_draw_desc_texts`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, draw_desc_sequence, draw_desc_text. Default sort (`s`): [{\"document_number\": \"asc\"}, {\"draw_desc_sequence\": \"asc\"}].",
    "tags": [
     "pg_draw_desc_texts"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGDrawDescTextFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGDrawDescTextSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGDrawDescTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet"
   },
   "post": {
    "operationId": "PGDrawDescTextListPost",
    "summary": "List: pg_draw_desc_texts (POST, same parameters in a JSON body)",
    "description": "Upstream view PGDrawDescTextList (index `pg_draw_desc_texts`, response key `pg_draw_desc_texts`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, draw_desc_sequence, draw_desc_text. Default sort (`s`): [{\"document_number\": \"asc\"}, {\"draw_desc_sequence\": \"asc\"}].",
    "tags": [
     "pg_draw_desc_texts"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PGDrawDescTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/PGDrawDescTextFields"
         },
         "s": {
          "$ref": "#/components/schemas/PGDrawDescTextSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/publication/": {
   "get": {
    "operationId": "PublicationList",
    "summary": "List: publications",
    "description": "Upstream view PublicationList (index `publications`, response key `publications`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, publication_title, publication_date. Default sort (`s`): [{\"document_number\": \"asc\"}]. Nested groups usable in q and f with dotted names: assignees, cpc_at_issue, cpc_current, foreign_priority, gov_interest_organizations, granted_pregrant_crosswalk, inventors, ipcr, pct_data, us_parties, us_related_documents, uspc_at_issue, wipo.",
    "tags": [
     "publications"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PublicationFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PublicationSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PublicationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet"
   },
   "post": {
    "operationId": "PublicationListPost",
    "summary": "List: publications (POST, same parameters in a JSON body)",
    "description": "Upstream view PublicationList (index `publications`, response key `publications`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, publication_title, publication_date. Default sort (`s`): [{\"document_number\": \"asc\"}]. Nested groups usable in q and f with dotted names: assignees, cpc_at_issue, cpc_current, foreign_priority, gov_interest_organizations, granted_pregrant_crosswalk, inventors, ipcr, pct_data, us_parties, us_related_documents, uspc_at_issue, wipo.",
    "tags": [
     "publications"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PublicationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/PublicationFields"
         },
         "s": {
          "$ref": "#/components/schemas/PublicationSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/publication/{pk}/": {
   "get": {
    "operationId": "PublicationDetail",
    "summary": "Detail: publications",
    "description": "Upstream view PublicationDetail (index `publications`, response key `publications`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, publication_title, publication_date. Default sort (`s`): [{\"document_number\": \"asc\"}]. Nested groups usable in q and f with dotted names: assignees, cpc_at_issue, cpc_current, foreign_priority, gov_interest_organizations, granted_pregrant_crosswalk, inventors, ipcr, pct_data, us_parties, us_related_documents, uspc_at_issue, wipo.",
    "tags": [
     "publications"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (document_number), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PublicationFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PublicationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet"
   },
   "post": {
    "operationId": "PublicationDetailPost",
    "summary": "Detail: publications (POST, same parameters in a JSON body)",
    "description": "Upstream view PublicationDetail (index `publications`, response key `publications`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, publication_title, publication_date. Default sort (`s`): [{\"document_number\": \"asc\"}]. Nested groups usable in q and f with dotted names: assignees, cpc_at_issue, cpc_current, foreign_priority, gov_interest_organizations, granted_pregrant_crosswalk, inventors, ipcr, pct_data, us_parties, us_related_documents, uspc_at_issue, wipo.",
    "tags": [
     "publications"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (document_number), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PublicationResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet",
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/PublicationFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/publication/rel_app_text/": {
   "get": {
    "operationId": "RelatedTextPubList",
    "summary": "List: rel_app_texts",
    "description": "Upstream view RelatedTextPubList (index `rel_app_text_publications`, response key `rel_app_texts`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, related_text. Default sort (`s`): [{\"document_number\": \"asc\"}].",
    "tags": [
     "rel_app_texts"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Required: without it the endpoint answers 400 ERR_Q.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Query"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RelatedTextFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RelatedTextSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RelatedTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet"
   },
   "post": {
    "operationId": "RelatedTextPubListPost",
    "summary": "List: rel_app_texts (POST, same parameters in a JSON body)",
    "description": "Upstream view RelatedTextPubList (index `rel_app_text_publications`, response key `rel_app_texts`). Deferred: pre-grant publications are not in this snapshot yet; the endpoint answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED. Any field may be null where the bulk data has no value. Default fields (`f`): document_number, related_text. Default sort (`s`): [{\"document_number\": \"asc\"}].",
    "tags": [
     "rel_app_texts"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RelatedTextResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "x-patentref-deferred": "pre-grant publications, not in this snapshot yet",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/Query"
         },
         "f": {
          "$ref": "#/components/schemas/RelatedTextFields"
         },
         "s": {
          "$ref": "#/components/schemas/RelatedTextSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        },
        "required": [
         "q"
        ]
       }
      }
     }
    }
   }
  },
  "/api/v1/uspc_mainclass/": {
   "get": {
    "operationId": "USPCMainclassList",
    "summary": "List: uspc_mainclasses",
    "description": "Upstream view USPCMainclassList (index `uspc_mainclasses`, response key `uspc_mainclasses`). Any field may be null where the bulk data has no value. Default fields (`f`): uspc_mainclass_id, uspc_mainclass_title. Default sort (`s`): [{\"uspc_mainclass_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "uspc_mainclasses"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": false,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Optional on this lookup endpoint.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LookupQuery"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCMainclassLookupFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCMainclassLookupSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCMainclassLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "USPCMainclassListPost",
    "summary": "List: uspc_mainclasses (POST, same parameters in a JSON body)",
    "description": "Upstream view USPCMainclassList (index `uspc_mainclasses`, response key `uspc_mainclasses`). Any field may be null where the bulk data has no value. Default fields (`f`): uspc_mainclass_id, uspc_mainclass_title. Default sort (`s`): [{\"uspc_mainclass_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "uspc_mainclasses"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCMainclassLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/LookupQuery"
         },
         "f": {
          "$ref": "#/components/schemas/USPCMainclassLookupFields"
         },
         "s": {
          "$ref": "#/components/schemas/USPCMainclassLookupSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/uspc_mainclass/{pk}/": {
   "get": {
    "operationId": "USPCMainclassDetail",
    "summary": "Detail: uspc_mainclasses",
    "description": "Upstream view USPCMainclassDetail (index `uspc_mainclasses`, response key `uspc_mainclasses`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): uspc_mainclass_id, uspc_mainclass_title. Default sort (`s`): [{\"uspc_mainclass_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "uspc_mainclasses"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (uspc_mainclass_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCMainclassLookupFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCMainclassLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "USPCMainclassDetailPost",
    "summary": "Detail: uspc_mainclasses (POST, same parameters in a JSON body)",
    "description": "Upstream view USPCMainclassDetail (index `uspc_mainclasses`, response key `uspc_mainclasses`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): uspc_mainclass_id, uspc_mainclass_title. Default sort (`s`): [{\"uspc_mainclass_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "uspc_mainclasses"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (uspc_mainclass_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCMainclassLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/USPCMainclassLookupFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/uspc_subclass/": {
   "get": {
    "operationId": "USPCSubclassList",
    "summary": "List: uspc_subclasses",
    "description": "Upstream view USPCSubclassList (index `uspc_subclasses`, response key `uspc_subclasses`). Any field may be null where the bulk data has no value. Default fields (`f`): uspc_subclass_id, uspc_subclass_title. Default sort (`s`): [{\"uspc_subclass_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "uspc_subclasses"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": false,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Optional on this lookup endpoint.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LookupQuery"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCSubclassLookupFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCSubclassLookupSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCSubclassLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "USPCSubclassListPost",
    "summary": "List: uspc_subclasses (POST, same parameters in a JSON body)",
    "description": "Upstream view USPCSubclassList (index `uspc_subclasses`, response key `uspc_subclasses`). Any field may be null where the bulk data has no value. Default fields (`f`): uspc_subclass_id, uspc_subclass_title. Default sort (`s`): [{\"uspc_subclass_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "uspc_subclasses"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCSubclassLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/LookupQuery"
         },
         "f": {
          "$ref": "#/components/schemas/USPCSubclassLookupFields"
         },
         "s": {
          "$ref": "#/components/schemas/USPCSubclassLookupSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/uspc_subclass/{pk}/": {
   "get": {
    "operationId": "USPCSubclassDetail",
    "summary": "Detail: uspc_subclasses",
    "description": "Upstream view USPCSubclassDetail (index `uspc_subclasses`, response key `uspc_subclasses`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): uspc_subclass_id, uspc_subclass_title. Default sort (`s`): [{\"uspc_subclass_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "uspc_subclasses"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (uspc_subclass_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCSubclassLookupFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCSubclassLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "USPCSubclassDetailPost",
    "summary": "Detail: uspc_subclasses (POST, same parameters in a JSON body)",
    "description": "Upstream view USPCSubclassDetail (index `uspc_subclasses`, response key `uspc_subclasses`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): uspc_subclass_id, uspc_subclass_title. Default sort (`s`): [{\"uspc_subclass_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "uspc_subclasses"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (uspc_subclass_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/USPCSubclassLookupResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/USPCSubclassLookupFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/wipo/": {
   "get": {
    "operationId": "WIPOList",
    "summary": "List: wipo",
    "description": "Upstream view WIPOList (index `wipo`, response key `wipo`). Any field may be null where the bulk data has no value. Default fields (`f`): wipo_id, sector_title, field_title. Default sort (`s`): [{\"wipo_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "wipo"
    ],
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": false,
      "description": "The query, a JSON object with exactly one key (the Query schema), URL-encoded. Example: {\"patent_id\":\"10905426\"} or {\"_and\":[{\"_gte\":{\"patent_date\":\"2020-01-01\"}},{\"_text_any\":{\"patent_title\":\"laser\"}}]}. Optional on this lookup endpoint.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/LookupQuery"
        }
       }
      }
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/WIPOFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "description": "JSON list of {field: \"asc\" | \"desc\"} on the sortable fields listed in the schema. A default sort always applies; relevance never orders results.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/WIPOSort"
        }
       }
      }
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/WIPOResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "WIPOListPost",
    "summary": "List: wipo (POST, same parameters in a JSON body)",
    "description": "Upstream view WIPOList (index `wipo`, response key `wipo`). Any field may be null where the bulk data has no value. Default fields (`f`): wipo_id, sector_title, field_title. Default sort (`s`): [{\"wipo_id\": \"asc\"}]. A lookup endpoint: q may be omitted to list every record. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "wipo"
    ],
    "parameters": [],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/WIPOResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "$ref": "#/components/schemas/LookupQuery"
         },
         "f": {
          "$ref": "#/components/schemas/WIPOFields"
         },
         "s": {
          "$ref": "#/components/schemas/WIPOSort"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/wipo/{pk}/": {
   "get": {
    "operationId": "WIPODetail",
    "summary": "Detail: wipo",
    "description": "Upstream view WIPODetail (index `wipo`, response key `wipo`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): wipo_id, sector_title, field_title. Default sort (`s`): [{\"wipo_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "wipo"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (wipo_id), with any '/' written ':'."
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with q."
     },
     {
      "name": "f",
      "in": "query",
      "required": false,
      "description": "JSON list of field names to return; a nested group's name returns the whole group, dotted names one field of it. Omitted: the endpoint's default fields.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/WIPOFields"
        }
       }
      }
     },
     {
      "name": "s",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Accepted and ignored on a detail route: the key in the path selects the record. Use the list route to query with s."
     },
     {
      "$ref": "#/components/parameters/o"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/WIPOResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "WIPODetailPost",
    "summary": "Detail: wipo (POST, same parameters in a JSON body)",
    "description": "Upstream view WIPODetail (index `wipo`, response key `wipo`). q and s are accepted and ignored here: the key in the path selects the record. A '/' in a key is written ':' (cpc_group G01S7/4811 is /api/v1/cpc_group/G01S7:4811/, uspc_subclass 100/1 is /api/v1/uspc_subclass/100:1/), as the links inside records show. The trailing slash is part of the route: without it the answer is 301 to the form with it (the query string kept), which a POST body does not follow. Any field may be null where the bulk data has no value. Default fields (`f`): wipo_id, sector_title, field_title. Default sort (`s`): [{\"wipo_id\": \"asc\"}]. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.",
    "tags": [
     "wipo"
    ],
    "parameters": [
     {
      "name": "pk",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "The record key (wipo_id), with any '/' written ':'."
     }
    ],
    "responses": {
     "200": {
      "description": "Matching records",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/WIPOResponse"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadQuery"
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "$ref": "#/components/responses/SearchError"
     },
     "404": {
      "description": "No record with that key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/NotFoundBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    },
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "description": "The four parameters as JSON values in one body, as on GET.",
        "properties": {
         "q": {
          "description": "Accepted and ignored on a detail route"
         },
         "f": {
          "$ref": "#/components/schemas/WIPOFields"
         },
         "s": {
          "description": "Accepted and ignored on a detail route"
         },
         "o": {
          "$ref": "#/components/schemas/Options"
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/lapse/status/{patent_id}/": {
   "get": {
    "tags": [
     "lapse"
    ],
    "parameters": [
     {
      "name": "patent_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "A granted patent number as PatentsView prints it: 10000000, D872010, RE31177, PP36776 (no US prefix, no leading zeros)"
     },
     {
      "name": "v",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "pattern": "^[0-9]{8}\\.[0-9]+$"
      },
      "description": "A data_version. A superseded one adds a `superseded` object to the answer (never a 404); one that never existed answers 404."
     }
    ],
    "description": "check_patent_status: status, basis, reinstatement_possible with its basis (37 CFR 1.378 for a fee lapse, 35 USC 154 when the term has ended), as_of, data_version, a versioned permalink, one plain sentence and next_steps. The record has no error member (the list and detail answers do); an error answer has the usual forms.",
    "responses": {
     "200": {
      "description": "The verdict record",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CheckPatentStatus"
        }
       }
      }
     },
     "400": {
      "description": "Not a patent number, X-Status-Reason-Code ERR_Q",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "404": {
      "description": "An unknown patent answers {\"detail\": \"Not found.\"} with no X-Status-Reason-Code, as the detail routes do; a v that never existed answers {\"error\": true} with X-Status-Reason-Code NOT_FOUND and the reason in X-Status-Reason. With Accept: application/problem+json both are problem details objects with code NOT_FOUND.",
      "content": {
       "application/json": {
        "schema": {
         "oneOf": [
          {
           "$ref": "#/components/schemas/NotFoundBody"
          },
          {
           "$ref": "#/components/schemas/ErrorBody"
          }
         ]
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "description": "The record failed the wording check before it left the server (ERR_ES); retry later",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "503": {
      "description": "The status catalog is not available on the server (ERR_ES)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    },
    "operationId": "LapseStatus",
    "summary": "One-call expiry and maintenance-fee verdict for a patent"
   }
  },
  "/api/v1/status/{patent_id}/": {
   "get": {
    "tags": [
     "lapse"
    ],
    "parameters": [
     {
      "name": "patent_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "A granted patent number as PatentsView prints it: 10000000, D872010, RE31177, PP36776 (no US prefix, no leading zeros)"
     },
     {
      "name": "v",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "pattern": "^[0-9]{8}\\.[0-9]+$"
      },
      "description": "A data_version. A superseded one adds a `superseded` object to the answer (never a 404); one that never existed answers 404."
     }
    ],
    "description": "check_patent_status: status, basis, reinstatement_possible with its basis (37 CFR 1.378 for a fee lapse, 35 USC 154 when the term has ended), as_of, data_version, a versioned permalink, one plain sentence and next_steps. The record has no error member (the list and detail answers do); an error answer has the usual forms.",
    "responses": {
     "200": {
      "description": "The verdict record",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CheckPatentStatus"
        }
       }
      }
     },
     "400": {
      "description": "Not a patent number, X-Status-Reason-Code ERR_Q",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "404": {
      "description": "An unknown patent answers {\"detail\": \"Not found.\"} with no X-Status-Reason-Code, as the detail routes do; a v that never existed answers {\"error\": true} with X-Status-Reason-Code NOT_FOUND and the reason in X-Status-Reason. With Accept: application/problem+json both are problem details objects with code NOT_FOUND.",
      "content": {
       "application/json": {
        "schema": {
         "oneOf": [
          {
           "$ref": "#/components/schemas/NotFoundBody"
          },
          {
           "$ref": "#/components/schemas/ErrorBody"
          }
         ]
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "description": "The record failed the wording check before it left the server (ERR_ES); retry later",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "503": {
      "description": "The status catalog is not available on the server (ERR_ES)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    },
    "operationId": "LapseStatusAlias",
    "summary": "Alias of /api/v1/lapse/status/{patent_id}/"
   }
  },
  "/api/v1/lapse/similar": {
   "get": {
    "operationId": "LapseSimilar",
    "tags": [
     "lapse"
    ],
    "summary": "Patents whose title and abstract are nearest to a text",
    "description": "FTS5 bm25 over patent_title and patent_abstract, an OR of the rarest input tokens (tokens in more than 2 percent of patents are dropped, 16 kept), ties by patent_id. Usually under 2 s; the first queries after a data swap can take 10 s. The path also answers with a trailing slash (/api/v1/lapse/similar/).",
    "parameters": [
     {
      "name": "text",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "maxLength": 4000
      },
      "description": "Free text, for example a claim or an abstract"
     },
     {
      "name": "n",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "minimum": 1,
       "maximum": 20,
       "default": 20
      }
     },
     {
      "name": "mode",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "text",
        "structured"
       ],
       "default": "text"
      },
      "description": "text (the default, the answer above, the same with or without this parameter) or structured (experimental; SimilarStructuredResponse: patents ranked by the claim terms they share with the text). Any other value answers 400 ERR_Q. mode=structured: the patents whose claims introduce the most of the text's term keys. The keys are the noun phrases the claim tree's term finder reads in the text (lower case, the last word singular, as a claim tree's term key), weighed by how rare their rarest word is in titles and abstracts (keys in more than 2 percent of patents dropped unless fewer than 3 are left; at most 12). Candidates come from the title and abstract index: the text mode's own query and the keys as phrases, 40 each. Each candidate's claims are parsed when asked for, by the claim tree's parser (no language model, nothing stored). score is the weighed share of the text's keys found among the terms the patent's claims introduce: 1 for the same key, half for a key that ends with the other as whole words (drive motor and electric drive motor); 1 means every key found. A patent with none, without claim text, or over the claim tree's work cap is left out. Ties by the number of keys found the same, then by patent_id. shared_terms says where the claim text has each one: the claim's number and the mention's start and end in that claim's text, the offsets of GET /api/v1/structure/claims/{patent_id}/. A score describes shared wording in the published text and nothing more. Experimental: the ranking is weakest where the shared terms are common short claim words, where near-identical patents tie, and where a text yields fewer than 3 term keys, as many chemistry abstracts do."
     }
    ],
    "responses": {
     "200": {
      "description": "Nearest patents",
      "content": {
       "application/json": {
        "schema": {
         "oneOf": [
          {
           "$ref": "#/components/schemas/SimilarResponse"
          },
          {
           "$ref": "#/components/schemas/SimilarStructuredResponse"
          }
         ]
        }
       }
      }
     },
     "400": {
      "description": "text missing or too long, n out of range (ERR_Q)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "501": {
      "description": "mode=structured with no long-text file in service, X-Status-Reason-Code ERR_NOT_IMPLEMENTED (the text mode needs none)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    }
   }
  },
  "/p/{patent_id}": {
   "get": {
    "operationId": "RecordPage",
    "tags": [
     "lapse"
    ],
    "summary": "The per-patent record page (HTML), the target of the permalink",
    "security": [],
    "parameters": [
     {
      "name": "patent_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "A granted patent number as PatentsView prints it: 10000000, D872010, RE31177, PP36776 (no US prefix, no leading zeros)"
     },
     {
      "name": "v",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "pattern": "^[0-9]{8}\\.[0-9]+$"
      },
      "description": "A data_version. A superseded one adds a `superseded` object to the answer (never a 404); one that never existed answers 404."
     }
    ],
    "responses": {
     "200": {
      "description": "HTML page",
      "content": {
       "text/html": {}
      }
     },
     "404": {
      "description": "unknown patent or a v that never existed"
     }
    }
   }
  },
  "/api/v1/meta/": {
   "get": {
    "operationId": "MetaIndex",
    "tags": [
     "meta"
    ],
    "summary": "Build facts: data version, as-of date, refresh date and the delta of the build in service",
    "security": [],
    "responses": {
     "200": {
      "description": "Build facts",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Meta"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/meta/health/": {
   "get": {
    "operationId": "MetaHealth",
    "tags": [
     "meta"
    ],
    "summary": "Liveness: 200 when the search database answers, else 503 (HEAD answers the same status with no body)",
    "security": [],
    "responses": {
     "200": {
      "description": "ok",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Health"
        }
       }
      }
     },
     "503": {
      "description": "database unavailable",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Health"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/meta/status/": {
   "get": {
    "operationId": "MetaStatus",
    "tags": [
     "meta"
    ],
    "summary": "Public status page (HTML); /api/v1/meta/status.json is the machine twin",
    "security": [],
    "responses": {
     "200": {
      "description": "status page",
      "content": {
       "text/html": {}
      }
     }
    }
   }
  },
  "/api/v1/meta/status.json": {
   "get": {
    "operationId": "MetaStatusJson",
    "tags": [
     "meta"
    ],
    "summary": "The public status figures as JSON",
    "security": [],
    "responses": {
     "200": {
      "description": "status figures",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Status"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/meta/keys/": {
   "get": {
    "operationId": "MetaKeysList",
    "tags": [
     "meta"
    ],
    "summary": "The caller's keys, newest first (prefixes, never the key values)",
    "security": [
     {
      "supabaseBearer": []
     }
    ],
    "responses": {
     "200": {
      "description": "keys",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/KeyList"
        }
       }
      }
     },
     "401": {
      "$ref": "#/components/responses/NoAuth"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     }
    }
   },
   "post": {
    "operationId": "MetaKeys",
    "tags": [
     "meta"
    ],
    "summary": "Mint or rotate the caller's Free key (Bearer Supabase access token)",
    "description": "An empty body, or {\"action\": \"create\"}, mints the account's first key (201, the value shown once) or returns the active key's record (200, api_key null). {\"action\": \"rotate\"} revokes the active key and mints a new one (201); the month's count stays with the account. A new account's first key is refused for disposable email domains (403 ERR_AUTH) and capped at 20 a day per email domain (429 ERR_SIGNUP_LIMIT). A key is minted or rotated only once the Terms of Service, the Privacy Policy and the Acceptable Use Policy (https://patentref.io/docs/legal/terms, /docs/legal/privacy, /docs/legal/acceptable-use) are accepted: send {\"terms_version\": \"<version>\"} after reading them, unless the account accepted that version at sign-up or with its last key; otherwise 403 ERR_TERMS names the version and the links. Keys minted before keep working.",
    "security": [
     {
      "supabaseBearer": []
     }
    ],
    "requestBody": {
     "required": false,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "properties": {
         "action": {
          "type": "string",
          "enum": [
           "create",
           "rotate"
          ],
          "default": "create"
         },
         "terms_version": {
          "type": "string",
          "description": "The version of the terms the caller read and accepts (the version a 403 ERR_TERMS names); needed to mint or rotate unless the account already accepted it"
         },
         "source": {
          "type": "string",
          "pattern": "^[A-Za-z0-9-]{1,32}$",
          "description": "The campaign code of the sign-up link (its utm_source): 1 to 32 letters, digits and hyphens. When this request creates a key, one is added to that ISO week's count for the code. Nothing is stored with the key or the account, the answer is the same with or without it, and a code outside the rule is ignored."
         }
        }
       }
      }
     }
    },
    "responses": {
     "201": {
      "description": "key minted; api_key holds the value, shown once",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/KeyInfo"
        }
       }
      }
     },
     "200": {
      "description": "the active key's record (api_key null)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/KeyInfo"
        }
       }
      }
     },
     "400": {
      "description": "action is not create or rotate (ERR_Q)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "401": {
      "$ref": "#/components/responses/NoAuth"
     },
     "403": {
      "description": "a disposable email domain (ERR_AUTH), or the terms not accepted (ERR_TERMS, the body names the version and the links)",
      "content": {
       "application/json": {
        "schema": {
         "anyOf": [
          {
           "$ref": "#/components/schemas/ErrorBody"
          },
          {
           "$ref": "#/components/schemas/TermsRequired"
          }
         ]
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "429": {
      "description": "the email domain's new accounts for the day are used up (ERR_SIGNUP_LIMIT, Retry-After to the end of the UTC day), or the per-address rate of the account endpoints",
      "headers": {
       "Retry-After": {
        "$ref": "#/components/headers/Retry-After"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/meta/usage/": {
   "get": {
    "operationId": "MetaUsage",
    "tags": [
     "meta"
    ],
    "summary": "This month's count, limits and reset time for the key",
    "description": "With X-Api-Key: that key's month. With a Supabase bearer token instead: the account's month. Reading usage does not count.",
    "security": [
     {
      "apiKey": []
     },
     {
      "supabaseBearer": []
     }
    ],
    "responses": {
     "200": {
      "description": "usage",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Usage"
        }
       }
      }
     },
     "401": {
      "$ref": "#/components/responses/NoAuth"
     },
     "403": {
      "description": "No X-Api-Key, or an unknown or revoked key: {\"error\": true} with X-Status-Reason-Code ERR_KEY (the account endpoints carry the code, unlike the data endpoints' 403)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     }
    }
   }
  },
  "/api/v1/rules/": {
   "get": {
    "operationId": "RulesIndex",
    "tags": [
     "rules"
    ],
    "summary": "The rules dataset: version, as_of, offices and row counts, the tools and the act vocabulary",
    "description": "Start here: the offices the dataset covers, the number of rows per office and rule_kind, each tool's parameters and the fixed act vocabulary per rule_kind. Records of what patent office rules say, each row with the URL of the official source it was read from, a verbatim quote under 300 characters, its effective dates and the date it was checked. Not legal advice. No rules path takes an application number, a patent number or a priority date, and none computes a date for a specific application: windows are generic periods counted from a named event. An unknown or refused parameter answers 400 ERR_Q with the reason in X-Status-Reason.",
    "parameters": [],
    "responses": {
     "200": {
      "description": "Rules rows with their citations",
      "headers": {
       "X-Rules-Version": {
        "schema": {
         "type": "string"
        },
        "description": "The rules dataset version of the answer (rules_version)"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RulesResponse"
        }
       }
      }
     },
     "400": {
      "description": "A missing, unknown or refused parameter, or a value out of its list (ERR_Q, the reason in X-Status-Reason)",
      "headers": {
       "X-Status-Reason": {
        "$ref": "#/components/headers/X-Status-Reason"
       },
       "X-Status-Reason-Code": {
        "$ref": "#/components/headers/X-Status-Reason-Code"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "description": "An answer failed the wording check before it left the server (ERR_ES); retry later",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "503": {
      "description": "The rules dataset is not available on the server (ERR_ES)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/rules/rep_required/": {
   "get": {
    "operationId": "RulesRepRequired",
    "tags": [
     "rules"
    ],
    "summary": "Representation rules of an office: when an applicant must act through a registered agent",
    "description": "The representation rows in force today. Records of what patent office rules say, each row with the URL of the official source it was read from, a verbatim quote under 300 characters, its effective dates and the date it was checked. Not legal advice. No rules path takes an application number, a patent number or a priority date, and none computes a date for a specific application: windows are generic periods counted from a named event. An unknown or refused parameter answers 400 ERR_Q with the reason in X-Status-Reason.",
    "parameters": [
     {
      "name": "office",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "US",
        "EP",
        "CN",
        "JP",
        "KR",
        "AU",
        "PCT"
       ]
      },
      "description": "The office: US, EP, CN, JP, KR, AU, or PCT for the international phase"
     },
     {
      "name": "act",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "One representation act (the vocabulary is in GET /api/v1/rules/ under vocabulary.representation); omitted: every act"
     }
    ],
    "responses": {
     "200": {
      "description": "Rules rows with their citations",
      "headers": {
       "X-Rules-Version": {
        "schema": {
         "type": "string"
        },
        "description": "The rules dataset version of the answer (rules_version)"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RulesResponse"
        }
       }
      }
     },
     "400": {
      "description": "A missing, unknown or refused parameter, or a value out of its list (ERR_Q, the reason in X-Status-Reason)",
      "headers": {
       "X-Status-Reason": {
        "$ref": "#/components/headers/X-Status-Reason"
       },
       "X-Status-Reason-Code": {
        "$ref": "#/components/headers/X-Status-Reason-Code"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "description": "An answer failed the wording check before it left the server (ERR_ES); retry later",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "503": {
      "description": "The rules dataset is not available on the server (ERR_ES)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/rules/fee_schedule/": {
   "get": {
    "operationId": "RulesFeeSchedule",
    "tags": [
     "rules"
    ],
    "summary": "Official fees of an office in force on a date",
    "description": "The fee rows in force on as_of: amounts with their currency and entity tiers, as the cited schedule prints them. Records of what patent office rules say, each row with the URL of the official source it was read from, a verbatim quote under 300 characters, its effective dates and the date it was checked. Not legal advice. No rules path takes an application number, a patent number or a priority date, and none computes a date for a specific application: windows are generic periods counted from a named event. An unknown or refused parameter answers 400 ERR_Q with the reason in X-Status-Reason.",
    "parameters": [
     {
      "name": "office",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "US",
        "EP",
        "CN",
        "JP",
        "KR",
        "AU",
        "PCT"
       ]
      },
      "description": "The office: US, EP, CN, JP, KR, AU, or PCT for the international phase"
     },
     {
      "name": "as_of",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "date"
      },
      "description": "The calendar date the schedule applies on, YYYY-MM-DD; default today (UTC). A row is in force when effective_from <= as_of < effective_to"
     }
    ],
    "responses": {
     "200": {
      "description": "Rules rows with their citations",
      "headers": {
       "X-Rules-Version": {
        "schema": {
         "type": "string"
        },
        "description": "The rules dataset version of the answer (rules_version)"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RulesResponse"
        }
       }
      }
     },
     "400": {
      "description": "A missing, unknown or refused parameter, or a value out of its list (ERR_Q, the reason in X-Status-Reason)",
      "headers": {
       "X-Status-Reason": {
        "$ref": "#/components/headers/X-Status-Reason"
       },
       "X-Status-Reason-Code": {
        "$ref": "#/components/headers/X-Status-Reason-Code"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "description": "An answer failed the wording check before it left the server (ERR_ES); retry later",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "503": {
      "description": "The rules dataset is not available on the server (ERR_ES)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/rules/route_windows/": {
   "get": {
    "operationId": "RulesRouteWindows",
    "tags": [
     "rules"
    ],
    "summary": "Generic windows of an office (months from a named event)",
    "description": "The window rows in force today: periods such as the national phase time limit counted from the priority date, never a date for an application. Records of what patent office rules say, each row with the URL of the official source it was read from, a verbatim quote under 300 characters, its effective dates and the date it was checked. Not legal advice. No rules path takes an application number, a patent number or a priority date, and none computes a date for a specific application: windows are generic periods counted from a named event. An unknown or refused parameter answers 400 ERR_Q with the reason in X-Status-Reason.",
    "parameters": [
     {
      "name": "office",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "US",
        "EP",
        "CN",
        "JP",
        "KR",
        "AU",
        "PCT"
       ]
      },
      "description": "The office: US, EP, CN, JP, KR, AU, or PCT for the international phase"
     }
    ],
    "responses": {
     "200": {
      "description": "Rules rows with their citations",
      "headers": {
       "X-Rules-Version": {
        "schema": {
         "type": "string"
        },
        "description": "The rules dataset version of the answer (rules_version)"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RulesResponse"
        }
       }
      }
     },
     "400": {
      "description": "A missing, unknown or refused parameter, or a value out of its list (ERR_Q, the reason in X-Status-Reason)",
      "headers": {
       "X-Status-Reason": {
        "$ref": "#/components/headers/X-Status-Reason"
       },
       "X-Status-Reason-Code": {
        "$ref": "#/components/headers/X-Status-Reason-Code"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "description": "An answer failed the wording check before it left the server (ERR_ES); retry later",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "503": {
      "description": "The rules dataset is not available on the server (ERR_ES)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/rules/pph_routes/": {
   "get": {
    "operationId": "RulesPphRoutes",
    "tags": [
     "rules"
    ],
    "summary": "Patent Prosecution Highway rows of an office that name another office as partner",
    "description": "The PPH rows of to_office whose cited source names from_office among its partners (value.partner_offices); to_office_pph_rows counts the rows the dataset holds for to_office. Records of what patent office rules say, each row with the URL of the official source it was read from, a verbatim quote under 300 characters, its effective dates and the date it was checked. Not legal advice. No rules path takes an application number, a patent number or a priority date, and none computes a date for a specific application: windows are generic periods counted from a named event. An unknown or refused parameter answers 400 ERR_Q with the reason in X-Status-Reason.",
    "parameters": [
     {
      "name": "from_office",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "US",
        "EP",
        "CN",
        "JP",
        "KR",
        "AU",
        "PCT"
       ]
      },
      "description": "The office whose work product the request relies on"
     },
     {
      "name": "to_office",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "US",
        "EP",
        "CN",
        "JP",
        "KR",
        "AU",
        "PCT"
       ]
      },
      "description": "The office the PPH request is filed with"
     }
    ],
    "responses": {
     "200": {
      "description": "Rules rows with their citations",
      "headers": {
       "X-Rules-Version": {
        "schema": {
         "type": "string"
        },
        "description": "The rules dataset version of the answer (rules_version)"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RulesResponse"
        }
       }
      }
     },
     "400": {
      "description": "A missing, unknown or refused parameter, or a value out of its list (ERR_Q, the reason in X-Status-Reason)",
      "headers": {
       "X-Status-Reason": {
        "$ref": "#/components/headers/X-Status-Reason"
       },
       "X-Status-Reason-Code": {
        "$ref": "#/components/headers/X-Status-Reason-Code"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "description": "An answer failed the wording check before it left the server (ERR_ES); retry later",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "503": {
      "description": "The rules dataset is not available on the server (ERR_ES)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/rules/ai_use_statement_required/": {
   "get": {
    "operationId": "RulesAiUseStatement",
    "tags": [
     "rules"
    ],
    "summary": "Rows on whether an office requires a statement on the use of AI",
    "description": "An empty answer means the dataset holds no cited rule for the office; nothing is inferred from its absence. Records of what patent office rules say, each row with the URL of the official source it was read from, a verbatim quote under 300 characters, its effective dates and the date it was checked. Not legal advice. No rules path takes an application number, a patent number or a priority date, and none computes a date for a specific application: windows are generic periods counted from a named event. An unknown or refused parameter answers 400 ERR_Q with the reason in X-Status-Reason.",
    "parameters": [
     {
      "name": "office",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "US",
        "EP",
        "CN",
        "JP",
        "KR",
        "AU",
        "PCT"
       ]
      },
      "description": "The office: US, EP, CN, JP, KR, AU, or PCT for the international phase"
     }
    ],
    "responses": {
     "200": {
      "description": "Rules rows with their citations",
      "headers": {
       "X-Rules-Version": {
        "schema": {
         "type": "string"
        },
        "description": "The rules dataset version of the answer (rules_version)"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RulesResponse"
        }
       }
      }
     },
     "400": {
      "description": "A missing, unknown or refused parameter, or a value out of its list (ERR_Q, the reason in X-Status-Reason)",
      "headers": {
       "X-Status-Reason": {
        "$ref": "#/components/headers/X-Status-Reason"
       },
       "X-Status-Reason-Code": {
        "$ref": "#/components/headers/X-Status-Reason-Code"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "description": "An answer failed the wording check before it left the server (ERR_ES); retry later",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "503": {
      "description": "The rules dataset is not available on the server (ERR_ES)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/rules/grace_period/": {
   "get": {
    "operationId": "RulesGracePeriod",
    "tags": [
     "rules"
    ],
    "summary": "Grace-period rows of an office, citations only",
    "description": "What the cited law says about disclosures before filing; whether any disclosure falls within a period is not answered. Records of what patent office rules say, each row with the URL of the official source it was read from, a verbatim quote under 300 characters, its effective dates and the date it was checked. Not legal advice. No rules path takes an application number, a patent number or a priority date, and none computes a date for a specific application: windows are generic periods counted from a named event. An unknown or refused parameter answers 400 ERR_Q with the reason in X-Status-Reason.",
    "parameters": [
     {
      "name": "office",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "US",
        "EP",
        "CN",
        "JP",
        "KR",
        "AU",
        "PCT"
       ]
      },
      "description": "The office: US, EP, CN, JP, KR, AU, or PCT for the international phase"
     }
    ],
    "responses": {
     "200": {
      "description": "Rules rows with their citations",
      "headers": {
       "X-Rules-Version": {
        "schema": {
         "type": "string"
        },
        "description": "The rules dataset version of the answer (rules_version)"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RulesResponse"
        }
       }
      }
     },
     "400": {
      "description": "A missing, unknown or refused parameter, or a value out of its list (ERR_Q, the reason in X-Status-Reason)",
      "headers": {
       "X-Status-Reason": {
        "$ref": "#/components/headers/X-Status-Reason"
       },
       "X-Status-Reason-Code": {
        "$ref": "#/components/headers/X-Status-Reason-Code"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "description": "An answer failed the wording check before it left the server (ERR_ES); retry later",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "503": {
      "description": "The rules dataset is not available on the server (ERR_ES)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/rules/changelog/": {
   "get": {
    "operationId": "RulesChangelog",
    "tags": [
     "rules"
    ],
    "summary": "The dataset's change list, newest first",
    "description": "One entry per release with its version, date and the rows it added, closed, changed or removed. Records of what patent office rules say, each row with the URL of the official source it was read from, a verbatim quote under 300 characters, its effective dates and the date it was checked. Not legal advice. No rules path takes an application number, a patent number or a priority date, and none computes a date for a specific application: windows are generic periods counted from a named event. An unknown or refused parameter answers 400 ERR_Q with the reason in X-Status-Reason.",
    "parameters": [
     {
      "name": "since",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "A version x.y.z or a date YYYY-MM-DD: only the releases after it"
     }
    ],
    "responses": {
     "200": {
      "description": "Rules rows with their citations",
      "headers": {
       "X-Rules-Version": {
        "schema": {
         "type": "string"
        },
        "description": "The rules dataset version of the answer (rules_version)"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/RulesResponse"
        }
       }
      }
     },
     "400": {
      "description": "A missing, unknown or refused parameter, or a value out of its list (ERR_Q, the reason in X-Status-Reason)",
      "headers": {
       "X-Status-Reason": {
        "$ref": "#/components/headers/X-Status-Reason"
       },
       "X-Status-Reason-Code": {
        "$ref": "#/components/headers/X-Status-Reason-Code"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "description": "An answer failed the wording check before it left the server (ERR_ES); retry later",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "503": {
      "description": "The rules dataset is not available on the server (ERR_ES)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/structure/claims/{patent_id}/": {
   "get": {
    "operationId": "StructureClaims",
    "tags": [
     "structure"
    ],
    "summary": "The claim tree of one patent, every part located in the claim text",
    "description": "The claim tree of one granted patent, computed when it is asked for from the claims the long-text file in service prints (the rows GET /api/v1/g_claim/ answers for the same patent_id), by PatentRef's claim parser: regular expressions and small state machines, the same answer for the same text every time, no language model. Per claim: the number, the category read from the preamble, the dependency with its basis (the text, the dependent field, or both), the preamble, the transition, the elements, the term mentions with the earlier mention each \"the\" or \"said\" phrase was matched to, the claim references and the flags; per patent: the relations between those parts and the patent's own flags. Every part carries start and end, offsets into its claim's text as published: text[start:end] is the part's text (string indices in Unicode code points; a UTF-16 client converts before slicing text outside the Basic Multilingual Plane). Every offset is checked before the answer leaves the server. Flags are notes on the text and the data, for example a dependent field that names other claims than the text does; none is a conclusion about a claim. structure_version names the shape of the tree and goes up when it changes. The server keeps a bounded number of recent trees in memory; a request usually takes under 50 ms on the server. Patents granted after the long-text file's last grant date have no claim text yet and answer 404. The path also answers without the trailing slash.",
    "parameters": [
     {
      "name": "patent_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "A granted patent number as PatentsView prints it: 10000000, D872010, RE31177, PP36776 (a US prefix is read too)"
     }
    ],
    "responses": {
     "200": {
      "description": "The claim tree",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       },
       "X-Text-Data-Version": {
        "$ref": "#/components/headers/X-Text-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ClaimTree"
        }
       }
      }
     },
     "400": {
      "description": "Not a patent number, X-Status-Reason-Code ERR_Q",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "404": {
      "description": "{\"error\": true} with X-Status-Reason-Code NOT_FOUND: a patent the data in service does not have, or a patent it has without claim text in the long-text file (granted after that file's last grant date); X-Status-Reason says which",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "description": "A claim set over the per-request work cap (1,000 claim rows, 1,000,000 characters, 5 s a read; the largest in the data has 887 claims), X-Status-Reason-Code ERR_ES",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   }
  },
  "/api/v1/structure/brief/{patent_id}/": {
   "get": {
    "operationId": "StructureBrief",
    "tags": [
     "structure"
    ],
    "summary": "A brief of one patent cut to fit a token budget, every quote located in the claim text",
    "description": "A brief of one granted patent that fits a token budget, built when it is asked for from the patent's record in the search file, its status record and its claim tree (the claims the long-text file in service prints, read by the claim tree's parser: no language model, nothing stored). It holds, in this order: identity (patent_id, patent_title, patent_type, patent_date for the grant, filing_date, claim_count and independent_count); status (the record GET /api/v1/lapse/status/{patent_id}/ answers, without its links; null when no status catalog is in service); independent_claims (each independent claim with its category, preamble, transition and elements); dependent_claims (one line for each dependent claim: its number, the claims it depends on, and its text from its transition, or from its body when it has none, to its end, cut at a space after at most 240 characters); component_keys (the term keys of the terms the claims introduce, each with the numbers of the claims that introduce it, independent claims first). The items are taken in that order, each independent claim's head before its elements, and the first item that does not fit ends the brief, so the brief for a smaller budget is the start of the brief for a larger one; truncated says whether the budget left anything out and omitted counts what it left out. tokens is the size of the whole answer by the stated proxy that tokenizer names: the UTF-8 bytes of the JSON body as sent, divided by 3 and rounded up, never over max_tokens. A model's own tokenizer counts differently; leave room by asking for less. Every quote (a preamble, a transition, an element, a dependent line) carries start and end, offsets into its claim's text as published (text[start:end] is the quote, in Unicode code points, the offsets GET /api/v1/structure/claims/{patent_id}/ serves), and every one is checked before the answer leaves the server. Every claim and element carries anchor, its place on the record page: page + \"#\" + anchor opens it there. The patent's own words (its title, the quoted claim text, the term keys) come as printed; nothing in the answer is a conclusion about a claim. The path also answers without the trailing slash.",
    "parameters": [
     {
      "name": "patent_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "A granted patent number as PatentsView prints it: 10000000, D872010, RE31177, PP36776 (a US prefix is read too)"
     },
     {
      "name": "max_tokens",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "minimum": 300,
       "maximum": 32000,
       "default": 2000
      },
      "description": "The budget: the answer is at most this many tokens by the stated proxy (UTF-8 bytes / 3, rounded up). 300 to 32000, default 2000; another value answers 400 ERR_Q."
     }
    ],
    "responses": {
     "200": {
      "description": "The brief",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       },
       "X-Text-Data-Version": {
        "schema": {
         "type": "string"
        },
        "description": "The data_version of the long-text file the claims came from (text_data_version in GET /api/v1/meta/health/)"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/PatentBrief"
        }
       }
      }
     },
     "400": {
      "description": "Not a patent number, or max_tokens not a whole number from 300 to 32000, X-Status-Reason-Code ERR_Q",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "404": {
      "description": "{\"error\": true} with X-Status-Reason-Code NOT_FOUND: a patent the data in service does not have, or a patent it has without claim text in the long-text file (granted after that file's last grant date); X-Status-Reason says which",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "description": "A claim set over the claim tree's work cap (1,000 claim rows, 1,000,000 characters, 5 s a read), or a check that failed so nothing was served, X-Status-Reason-Code ERR_ES",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "503": {
      "description": "The server cannot read the status records, X-Status-Reason-Code ERR_ES",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/structure/counts/{patent_id}/": {
   "get": {
    "operationId": "StructureCounts",
    "tags": [
     "structure"
    ],
    "summary": "The claim counts of one patent, defined against the USPTO Patent Claims Research Dataset",
    "description": "The claim counts of one granted patent, in the spirit of the USPTO Patent Claims Research Dataset (the USPTO Office of the Chief Economist's claims data for grants of 1976 to 2014), for every grant the long-text file in service holds. They are counted when they are asked for, from the claim tree GET /api/v1/structure/claims/{patent_id}/ builds from the same claims, with no language model and nothing stored: per patent the claims, the independent and dependent claims, the claims whose text names another claim (the USPTO dataset's rule for a dependent claim), words in all, of the first claim, and the least, mean and most of the independent and of the dependent claims, characters, the elements of the independent claims, the longest chain of dependencies, and the USPTO dataset's counts of the words \"consisting\" and \"or\" and of \"selected from\"; per claim the same counts for that claim. Every field is a count, or the least, mean or most of counts, and each field's description names the USPTO variable it follows. Words and characters are counted after the claim's number prefix; a word is a run of characters between white space with at least one letter or digit. Checked against the USPTO files on 1,000 random grants of 1976 to 2014: the claims of a patent agreed for 99.8 percent of patents, and the words of a claim came within 2 words or 2 percent for 93 percent of claims (97.7 percent for grants from 2002); https://patentref.io/docs/claim-counts.html gives every field and the comparison. counts_version names the fields and their rules and goes up when either changes. Patents granted after the long-text file's last grant date have no claim text yet and answer 404. The path also answers without the trailing slash.",
    "parameters": [
     {
      "name": "patent_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "A granted patent number as PatentsView prints it: 10000000, D872010, RE31177, PP36776 (a US prefix is read too)"
     }
    ],
    "responses": {
     "200": {
      "description": "The claim counts",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       },
       "X-Text-Data-Version": {
        "$ref": "#/components/headers/X-Text-Data-Version"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ClaimCounts"
        }
       }
      }
     },
     "400": {
      "description": "Not a patent number, X-Status-Reason-Code ERR_Q",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "404": {
      "description": "{\"error\": true} with X-Status-Reason-Code NOT_FOUND: a patent the data in service does not have, or a patent it has without claim text in the long-text file (granted after that file's last grant date); X-Status-Reason says which",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "429": {
      "$ref": "#/components/responses/Throttled"
     },
     "500": {
      "description": "A claim set over the claim tree's work cap (1,000 claim rows, 1,000,000 characters, 5 s a read; the largest in the data has 887 claims), X-Status-Reason-Code ERR_ES",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   }
  },
  "/api/v1/structure/triage/": {
   "get": {
    "operationId": "StructureTriage",
    "tags": [
     "structure"
    ],
    "summary": "The triage table: status, component positions and claim parts of up to 500 patents",
    "description": "The triage table: up to 500 granted patents in one answer, each with its expiry and maintenance-fee status, where each component sits in its claims, and each independent claim as a list of its parts. The patents are a list (patents: up to 500 numbers, as a list or as pasted text with or without US, thousands separators and kind codes) or a search of the claims (search: words that must all be in one claim, a \"quoted phrase\" kept as a phrase; limit: 1 to 500, default 100), read from the full-text index of the claims in the reverse of the order the long-text file loaded them, so recent grants tend to come first. Per patent, status, basis, reinstatement_possible and the dates are the values GET /api/v1/lapse/status/{patent_id}/ gives. The components (components: up to 12) are read as claim tree term keys (lower case, the last word singular); without them the table picks up to 6: the keys the most of its patents introduce, in at least two of them, weighed by how rare their rarest word is in titles and abstracts. For each component a cell gives its position: every_independent (each independent claim mentions it), some_independent (some do), only_dependent (no independent claim does and a dependent claim does) or absent (no claim does). A claim mentions a component when one of its term mentions has the component's key, or refers back to a mention that has it; match is exact (the same key) or partial (one key ends with the other as whole words, drive motor and electric drive motor). claim_parts give each independent claim as its preamble, transition, elements and wherein clauses. Every quote carries claim, claim_id, start and end: text is the claim's text from start to end (string indices in Unicode code points), checked on the server before the answer leaves. Built when asked for by the claim tree's deterministic parser (no language model, nothing stored, no corpus-wide index), with a bounded cache per server process. One table at a time per key, and a few at once on the server: beyond that the answer is 429 with Retry-After and X-Status-Reason. A table stops building after 20 s: the rows it did not reach say note time_limit and complete is false. output=csv gives the export: one row per patent, per component and per claim part, with the quote and its location; the mark column is for the reader's own have and lacks notes, which the page at https://patentref.io/triage/ keeps in the browser and never sends. One request toward the monthly allowance, whatever the number of patents. The table describes the text of the claims and nothing more. GET takes the fields as parameters; the path also answers without the trailing slash.",
    "parameters": [
     {
      "name": "patents",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Up to 500 patent numbers separated by commas or spaces (a long list goes in a POST body)"
     },
     {
      "name": "search",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "maxLength": 500
      },
      "description": "Words that must all be in one claim"
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "minimum": 1,
       "maximum": 500,
       "default": 100
      }
     },
     {
      "name": "components",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Up to 12 components separated by commas"
     },
     {
      "name": "output",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "json",
        "csv"
       ],
       "default": "json"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "The table (JSON), or with output=csv the export",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       },
       "X-Text-Data-Version": {
        "schema": {
         "type": "string"
        },
        "description": "The long-text file the claims came from"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/TriageTable"
        }
       },
       "text/csv": {
        "schema": {
         "type": "string"
        },
        "description": "RFC 4180, UTF-8, the columns of export_columns"
       }
      }
     },
     "400": {
      "description": "A request the table does not read (X-Status-Reason says why), X-Status-Reason-Code ERR_Q",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "description": "Over the per-minute or monthly allowance, or another table of this key, or a few others, are being built (then X-Status-Reason says so); Retry-After says when to send it again",
      "headers": {
       "Retry-After": {
        "$ref": "#/components/headers/Retry-After"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "detail": {
           "type": "string"
          }
         }
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "500": {
      "description": "A read of claims over its 5 s, X-Status-Reason-Code ERR_ES",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     }
    }
   },
   "post": {
    "operationId": "StructureTriagePost",
    "tags": [
     "structure"
    ],
    "summary": "The triage table: status, component positions and claim parts of up to 500 patents (POST, the fields in a JSON body)",
    "description": "The triage table: up to 500 granted patents in one answer, each with its expiry and maintenance-fee status, where each component sits in its claims, and each independent claim as a list of its parts. The patents are a list (patents: up to 500 numbers, as a list or as pasted text with or without US, thousands separators and kind codes) or a search of the claims (search: words that must all be in one claim, a \"quoted phrase\" kept as a phrase; limit: 1 to 500, default 100), read from the full-text index of the claims in the reverse of the order the long-text file loaded them, so recent grants tend to come first. Per patent, status, basis, reinstatement_possible and the dates are the values GET /api/v1/lapse/status/{patent_id}/ gives. The components (components: up to 12) are read as claim tree term keys (lower case, the last word singular); without them the table picks up to 6: the keys the most of its patents introduce, in at least two of them, weighed by how rare their rarest word is in titles and abstracts. For each component a cell gives its position: every_independent (each independent claim mentions it), some_independent (some do), only_dependent (no independent claim does and a dependent claim does) or absent (no claim does). A claim mentions a component when one of its term mentions has the component's key, or refers back to a mention that has it; match is exact (the same key) or partial (one key ends with the other as whole words, drive motor and electric drive motor). claim_parts give each independent claim as its preamble, transition, elements and wherein clauses. Every quote carries claim, claim_id, start and end: text is the claim's text from start to end (string indices in Unicode code points), checked on the server before the answer leaves. Built when asked for by the claim tree's deterministic parser (no language model, nothing stored, no corpus-wide index), with a bounded cache per server process. One table at a time per key, and a few at once on the server: beyond that the answer is 429 with Retry-After and X-Status-Reason. A table stops building after 20 s: the rows it did not reach say note time_limit and complete is false. output=csv gives the export: one row per patent, per component and per claim part, with the quote and its location; the mark column is for the reader's own have and lacks notes, which the page at https://patentref.io/triage/ keeps in the browser and never sends. One request toward the monthly allowance, whatever the number of patents. The table describes the text of the claims and nothing more. POST takes the fields in a JSON body (a list of 500 numbers is too long for a GET).",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/TriageRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "The table (JSON), or with output=csv the export",
      "headers": {
       "X-Data-Version": {
        "$ref": "#/components/headers/X-Data-Version"
       },
       "X-Text-Data-Version": {
        "schema": {
         "type": "string"
        },
        "description": "The long-text file the claims came from"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/TriageTable"
        }
       },
       "text/csv": {
        "schema": {
         "type": "string"
        },
        "description": "RFC 4180, UTF-8, the columns of export_columns"
       }
      }
     },
     "400": {
      "description": "A request the table does not read (X-Status-Reason says why), X-Status-Reason-Code ERR_Q",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "403": {
      "$ref": "#/components/responses/NoKey"
     },
     "429": {
      "description": "Over the per-minute or monthly allowance, or another table of this key, or a few others, are being built (then X-Status-Reason says so); Retry-After says when to send it again",
      "headers": {
       "Retry-After": {
        "$ref": "#/components/headers/Retry-After"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "detail": {
           "type": "string"
          }
         }
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "500": {
      "description": "A read of claims over its 5 s, X-Status-Reason-Code ERR_ES",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorBody"
        }
       },
       "application/problem+json": {
        "schema": {
         "$ref": "#/components/schemas/ProblemDetails"
        }
       }
      }
     },
     "501": {
      "$ref": "#/components/responses/NotImplemented"
     },
     "413": {
      "$ref": "#/components/responses/TooLarge"
     }
    }
   }
  }
 },
 "components": {
  "securitySchemes": {
   "apiKey": {
    "type": "apiKey",
    "in": "header",
    "name": "X-Api-Key",
    "description": "A Free key from https://patentref.io/api/v1/meta/signup/ (1,000 requests a month, 45 a minute). What counts toward the monthly allowance: a request to a data path under /api/v1/ (outside /api/v1/meta/) that carried X-Api-Key and was answered below 500 other than 403 and 429, so 200, 400 and 404 count; 403, 429 and 5xx answers (the 501 of a deferred endpoint too), the /api/v1/meta/ endpoints (usage, keys, health, status), the record pages and the files at the site root do not. Keys minted from an account count per account, so rotating a key keeps the month's count."
   },
   "supabaseBearer": {
    "type": "http",
    "scheme": "bearer",
    "bearerFormat": "JWT",
    "description": "A Supabase Auth access token of the PatentRef project; used on /api/v1/meta/keys/ and, instead of a key, on /api/v1/meta/usage/."
   }
  },
  "parameters": {
   "o": {
    "name": "o",
    "in": "query",
    "required": false,
    "description": "JSON object: size (default 100, max 1000), after (the sort values of the last row of the previous page), pad_patent_id, exclude_withdrawn. offset is rejected with 400.",
    "content": {
     "application/json": {
      "schema": {
       "$ref": "#/components/schemas/Options"
      }
     }
    }
   }
  },
  "headers": {
   "X-Data-Version": {
    "schema": {
     "type": "string"
    },
    "description": "The data_version of the search file in service (one value per build). On the long-text endpoints the text itself comes from its own file, whose version is X-Text-Data-Version on the same answer and text_data_version in GET /api/v1/meta/health/."
   },
   "X-Status-Reason": {
    "schema": {
     "type": "string"
    },
    "description": "Upstream error text."
   },
   "X-Status-Reason-Code": {
    "schema": {
     "type": "string"
    },
    "description": "ERR_Q (bad query, 400), ERR_ES (search error or timeout, 500) and ERR_NOT_IMPLEMENTED (data set not in this snapshot, 501) on the data endpoints; NOT_FOUND (404) on /api/v1/lapse/status/{patent_id}/ when v names a data_version that never existed, and on /api/v1/structure/claims/{patent_id}/ for a patent without a claim tree (not in the data, or without claim text), as on /api/v1/structure/brief/{patent_id}/ and /api/v1/structure/counts/{patent_id}/; on the account endpoints under /api/v1/meta/ also ERR_KEY (no or revoked key, 403), ERR_AUTH (bad bearer token, 401), ERR_SIGNUP_LIMIT (429) and ERR_TERMS (a key mint without the terms accepted, 403). A data endpoint's 403 and 429 and a detail route's 404 carry no code header, as upstream; their problem details body names ERR_KEY, THROTTLED or NOT_FOUND."
   },
   "X-Text-Data-Version": {
    "schema": {
     "type": "string"
    },
    "description": "On the four long-text endpoints and on the claim tree, the brief, the claim counts and the triage table: the data_version of the long-text file the rows came from (text_data_version in GET /api/v1/meta/health/); absent when no long-text file is in service. Cache long text under it."
   },
   "Retry-After": {
    "schema": {
     "type": "integer"
    },
    "description": "Seconds until the window that refused the request resets: the minute, the month, or for sign-ups the UTC day."
   }
  },
  "responses": {
   "TooLarge": {
    "description": "A request body over 64,000 bytes: refused by the web server in front of the API, with or without a key, with an empty body and no X-Status-Reason-Code. q over 16 KB inside a smaller body answers 400 ERR_Q."
   },
   "BadQuery": {
    "description": "Invalid q, f, s or o (upstream strings, byte for byte); also an over-cost query, or q over 16 KB (16,384 bytes) in a POST body. A GET request line over 4,094 bytes also answers 400, from the web server in front of the API: an HTML page with no X-Status-Reason-Code; send such a query by POST.",
    "headers": {
     "X-Status-Reason": {
      "$ref": "#/components/headers/X-Status-Reason"
     },
     "X-Status-Reason-Code": {
      "$ref": "#/components/headers/X-Status-Reason-Code"
     }
    },
    "content": {
     "application/json": {
      "schema": {
       "$ref": "#/components/schemas/ErrorBody"
      }
     },
     "application/problem+json": {
      "schema": {
       "$ref": "#/components/schemas/ProblemDetails"
      }
     }
    }
   },
   "NoKey": {
    "description": "Missing, unknown or revoked X-Api-Key (checked before throttling, as upstream); body {\"detail\": \"You do not have permission to perform this action.\"} with no X-Status-Reason-Code header; with Accept: application/problem+json the body is a problem details object with code ERR_KEY",
    "content": {
     "application/json": {
      "schema": {
       "type": "object",
       "properties": {
        "detail": {
         "type": "string"
        }
       }
      }
     },
     "application/problem+json": {
      "schema": {
       "$ref": "#/components/schemas/ProblemDetails"
      }
     }
    }
   },
   "NoAuth": {
    "description": "Missing or invalid bearer token (X-Status-Reason-Code ERR_AUTH)",
    "content": {
     "application/json": {
      "schema": {
       "$ref": "#/components/schemas/ErrorBody"
      }
     },
     "application/problem+json": {
      "schema": {
       "$ref": "#/components/schemas/ProblemDetails"
      }
     }
    }
   },
   "Throttled": {
    "description": "Over the per-minute or monthly allowance; body is DRF's \"Request was throttled. Expected available in N seconds.\"",
    "headers": {
     "Retry-After": {
      "$ref": "#/components/headers/Retry-After"
     }
    },
    "content": {
     "application/json": {
      "schema": {
       "type": "object",
       "properties": {
        "detail": {
         "type": "string"
        }
       }
      }
     },
     "application/problem+json": {
      "schema": {
       "$ref": "#/components/schemas/ProblemDetails"
      }
     }
    }
   },
   "SearchError": {
    "description": "Search error or timeout (20 s a statement, 30 s a request), X-Status-Reason-Code ERR_ES",
    "content": {
     "application/json": {
      "schema": {
       "$ref": "#/components/schemas/ErrorBody"
      }
     },
     "application/problem+json": {
      "schema": {
       "$ref": "#/components/schemas/ProblemDetails"
      }
     }
    }
   },
   "NotImplemented": {
    "description": "The endpoint's data set is not in this snapshot, X-Status-Reason-Code ERR_NOT_IMPLEMENTED: pre-grant publications (deferred), the dead NBER routes, the long text when no long-text file is in service, or any other data set the build in service does not carry (X-Status-Reason names it)",
    "content": {
     "application/json": {
      "schema": {
       "$ref": "#/components/schemas/ErrorBody"
      }
     },
     "application/problem+json": {
      "schema": {
       "$ref": "#/components/schemas/ProblemDetails"
      }
     }
    }
   }
  },
  "schemas": {
   "ErrorBody": {
    "type": "object",
    "description": "Upstream error body, byte for byte. The reason is in the X-Status-Reason header and the code in X-Status-Reason-Code. Send Accept: application/problem+json to receive the same facts as an RFC 9457 problem details object instead.",
    "properties": {
     "error": {
      "type": "boolean",
      "const": true
     }
    },
    "required": [
     "error"
    ]
   },
   "ProblemDetails": {
    "type": "object",
    "description": "RFC 9457 problem details, returned for any error when the request carries Accept: application/problem+json. The upstream headers X-Status-Reason and X-Status-Reason-Code are present on this form too.",
    "properties": {
     "type": {
      "type": "string",
      "format": "uri",
      "description": "https://patentref.io/docs/errors/<code>, a plain-text explanation of the code"
     },
     "title": {
      "type": "string"
     },
     "status": {
      "type": "integer"
     },
     "detail": {
      "type": "string",
      "description": "The X-Status-Reason text"
     },
     "instance": {
      "type": "string",
      "description": "The request path"
     },
     "code": {
      "type": "string",
      "description": "The X-Status-Reason-Code value when the response has that header (ERR_Q, ERR_ES, ERR_NOT_IMPLEMENTED, NOT_FOUND, ERR_KEY, ERR_AUTH, ERR_SIGNUP_LIMIT, ERR_TERMS) or, for responses without it, ERR_KEY (403), THROTTLED (429), NOT_FOUND (404)"
     },
     "data_version": {
      "type": "string"
     }
    },
    "required": [
     "type",
     "title",
     "status"
    ]
   },
   "NotFoundBody": {
    "type": "object",
    "description": "DRF's body for a detail key with no record, as upstream",
    "properties": {
     "detail": {
      "type": "string",
      "const": "Not found."
     }
    },
    "required": [
     "detail"
    ]
   },
   "QueryValue": {
    "description": "A string, number or boolean; a list of them means any of the values.",
    "anyOf": [
     {
      "type": [
       "string",
       "number",
       "boolean"
      ]
     },
     {
      "type": "array",
      "minItems": 1,
      "items": {
       "type": [
        "string",
        "number",
        "boolean"
       ]
      }
     }
    ]
   },
   "FieldCriterion": {
    "type": "object",
    "minProperties": 1,
    "maxProperties": 1,
    "description": "One field (a dotted name for a nested group's field) and its value, for example {\"patent_date\": \"2020-01-01\"}.",
    "propertyNames": {
     "pattern": "^[A-Za-z][A-Za-z0-9_]*(\\.[A-Za-z][A-Za-z0-9_]*)?$"
    },
    "additionalProperties": {
     "$ref": "#/components/schemas/QueryValue"
    }
   },
   "Query": {
    "type": "object",
    "minProperties": 1,
    "maxProperties": 1,
    "description": "The q grammar: one JSON object with exactly one key. A field name means equality ({\"patent_id\": \"10905426\"}; a list value means any of). _eq, _neq, _gt, _gte, _lt, _lte, _begins, _contains, _text_all, _text_any and _text_phrase take one field and its value; _and and _or take a list of queries; _not takes one query. Which operators suit a field depends on its kind (x-patentref-kind in the record schemas).",
    "properties": {
     "_eq": {
      "$ref": "#/components/schemas/FieldCriterion"
     },
     "_neq": {
      "$ref": "#/components/schemas/FieldCriterion"
     },
     "_gt": {
      "$ref": "#/components/schemas/FieldCriterion"
     },
     "_gte": {
      "$ref": "#/components/schemas/FieldCriterion"
     },
     "_lt": {
      "$ref": "#/components/schemas/FieldCriterion"
     },
     "_lte": {
      "$ref": "#/components/schemas/FieldCriterion"
     },
     "_begins": {
      "$ref": "#/components/schemas/FieldCriterion"
     },
     "_contains": {
      "$ref": "#/components/schemas/FieldCriterion"
     },
     "_text_all": {
      "$ref": "#/components/schemas/FieldCriterion"
     },
     "_text_any": {
      "$ref": "#/components/schemas/FieldCriterion"
     },
     "_text_phrase": {
      "$ref": "#/components/schemas/FieldCriterion"
     },
     "_and": {
      "type": "array",
      "minItems": 1,
      "items": {
       "$ref": "#/components/schemas/Query"
      }
     },
     "_or": {
      "type": "array",
      "minItems": 1,
      "items": {
       "$ref": "#/components/schemas/Query"
      }
     },
     "_not": {
      "$ref": "#/components/schemas/Query"
     }
    },
    "propertyNames": {
     "anyOf": [
      {
       "enum": [
        "_eq",
        "_neq",
        "_gt",
        "_gte",
        "_lt",
        "_lte",
        "_begins",
        "_contains",
        "_text_all",
        "_text_any",
        "_text_phrase",
        "_and",
        "_or",
        "_not"
       ]
      },
      {
       "pattern": "^[A-Za-z][A-Za-z0-9_]*(\\.[A-Za-z][A-Za-z0-9_]*)?$"
      }
     ]
    },
    "additionalProperties": {
     "$ref": "#/components/schemas/QueryValue"
    }
   },
   "LookupQuery": {
    "description": "q on a lookup endpoint: a query, or omitted (an empty object is accepted too) to list every record.",
    "anyOf": [
     {
      "$ref": "#/components/schemas/Query"
     },
     {
      "type": "object",
      "maxProperties": 0
     }
    ]
   },
   "Options": {
    "type": "object",
    "description": "The o parameter. offset is not an option: it answers 400 ERR_Q ('offset' has been replaces with 'after' parameter.); page with after.",
    "properties": {
     "size": {
      "type": "integer",
      "description": "Records per page: default 100, at most 1000 (a larger value is capped at 1000)"
     },
     "after": {
      "description": "The cursor: the sort values of the last record of the previous page, in the order of s (one value may be given bare)",
      "anyOf": [
       {
        "type": "array",
        "items": {
         "type": [
          "string",
          "number",
          "boolean",
          "null"
         ]
        }
       },
       {
        "type": [
         "string",
         "number",
         "boolean"
        ]
       }
      ]
     },
     "pad_patent_id": {
      "type": "boolean",
      "description": "Zero-pad patent_id to 8 characters in the answer (default false)"
     },
     "exclude_withdrawn": {
      "type": "boolean",
      "description": "Hide withdrawn patents on /api/v1/patent/ (default true); ignored elsewhere"
     }
    },
    "not": {
     "required": [
      "offset"
     ]
    }
   },
   "AssigneeRecord": {
    "type": "object",
    "properties": {
     "assignee_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "assignee_individual_name_first": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text+keyword",
      "description": "Kind: text with a keyword form."
     },
     "assignee_individual_name_last": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text+keyword",
      "description": "Kind: text with a keyword form."
     },
     "assignee_organization": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text+keyword",
      "description": "Kind: text with a keyword form."
     },
     "assignee_type": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "assignee_lastknown_city": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "assignee_lastknown_state": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "assignee_lastknown_country": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "An ISO 3166-1 alpha-2 country code in capitals, as PatentsView gives it: the United Kingdom is \"GB\", and \"UK\" matches nothing. Kind: text."
     },
     "assignee_lastknown_latitude": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "assignee_lastknown_longitude": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "assignee_lastknown_location": {
      "type": [
       "string",
       "null"
      ],
      "format": "uri",
      "description": "Link to the detail record: https://patentref.io/api/v1/location/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
      "x-patentref-kind": "keyword"
     },
     "assignee_first_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "assignee_last_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "assignee_num_inventors": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "assignee_num_patents": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "assignee_years_active": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "assignee_years": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "year": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "num_patents": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        }
       }
      },
      "description": "Nested group: name it in f (\"assignee_years\") for every field of the group, or \"assignee_years.<field>\" for one; query its fields in q with the same dotted names."
     },
     "raw_assignee_individual_name_first": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "f-only",
      "description": "PatentRef addition: the first name as printed on the grant of the assignee's most recent patent, the patent its other names come from (PatentsView g_assignee_not_disambiguated), beside the disambiguated name, which is PatentsView's one label for a whole cluster of names. Present only when f names it (raw_assignee_individual_name_first), then on every record; null where the bulk data has none or the data in service predates it. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q."
     },
     "raw_assignee_individual_name_last": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "f-only",
      "description": "PatentRef addition: the last name as printed on the grant of the assignee's most recent patent, the patent its other names come from (PatentsView g_assignee_not_disambiguated), beside the disambiguated name, which is PatentsView's one label for a whole cluster of names. Present only when f names it (raw_assignee_individual_name_last), then on every record; null where the bulk data has none or the data in service predates it. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q."
     },
     "raw_assignee_organization": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "f-only",
      "description": "PatentRef addition: the organization's name as printed on the grant of the assignee's most recent patent, the patent its other names come from (PatentsView g_assignee_not_disambiguated), beside the disambiguated name, which is PatentsView's one label for a whole cluster of names. Present only when f names it (raw_assignee_organization), then on every record; null where the bulk data has none or the data in service predates it. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q."
     }
    }
   },
   "AssigneeFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "assignee_id",
      "assignee_individual_name_first",
      "assignee_individual_name_last",
      "assignee_organization",
      "assignee_type",
      "assignee_lastknown_city",
      "assignee_lastknown_state",
      "assignee_lastknown_country",
      "assignee_lastknown_latitude",
      "assignee_lastknown_longitude",
      "assignee_lastknown_location",
      "assignee_first_seen_date",
      "assignee_last_seen_date",
      "assignee_num_inventors",
      "assignee_num_patents",
      "assignee_years_active",
      "assignee_years",
      "assignee_years.year",
      "assignee_years.num_patents",
      "raw_assignee_individual_name_first",
      "raw_assignee_individual_name_last",
      "raw_assignee_organization"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "AssigneeSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "assignee_id",
       "assignee_individual_name_first",
       "assignee_individual_name_last",
       "assignee_organization",
       "assignee_type",
       "assignee_lastknown_latitude",
       "assignee_lastknown_longitude",
       "assignee_first_seen_date",
       "assignee_last_seen_date",
       "assignee_num_inventors",
       "assignee_num_patents",
       "assignee_years_active"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "AssigneeResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "assignees": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/AssigneeRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "assignees"
    ]
   },
   "CPCClassRecord": {
    "type": "object",
    "properties": {
     "cpc_class_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "cpc_class_title": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "cpc_class_first_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "cpc_class_last_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "cpc_class_years_active": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "cpc_class_num_patents": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "cpc_class_num_assignees": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "cpc_class_num_inventors": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     }
    }
   },
   "CPCClassFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "cpc_class_id",
      "cpc_class_title",
      "cpc_class_first_seen_date",
      "cpc_class_last_seen_date",
      "cpc_class_years_active",
      "cpc_class_num_patents",
      "cpc_class_num_assignees",
      "cpc_class_num_inventors"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "CPCClassSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "cpc_class_id",
       "cpc_class_first_seen_date",
       "cpc_class_last_seen_date",
       "cpc_class_years_active",
       "cpc_class_num_patents",
       "cpc_class_num_assignees",
       "cpc_class_num_inventors"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "CPCClassResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "cpc_classes": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/CPCClassRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "cpc_classes"
    ]
   },
   "CPCGroupLookupRecord": {
    "type": "object",
    "properties": {
     "cpc_group_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "cpc_group_title": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "cpc_class_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "cpc_class": {
      "type": [
       "string",
       "null"
      ],
      "format": "uri",
      "description": "Link to the detail record: https://patentref.io/api/v1/cpc_class/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
      "x-patentref-kind": "keyword"
     },
     "cpc_subclass_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "cpc_subclass": {
      "type": [
       "string",
       "null"
      ],
      "format": "uri",
      "description": "Link to the detail record: https://patentref.io/api/v1/cpc_subclass/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
      "x-patentref-kind": "keyword"
     }
    }
   },
   "CPCGroupLookupFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "cpc_group_id",
      "cpc_group_title",
      "cpc_class_id",
      "cpc_class",
      "cpc_subclass_id",
      "cpc_subclass"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "CPCGroupLookupSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "cpc_group_id",
       "cpc_class_id",
       "cpc_subclass_id"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "CPCGroupLookupResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "cpc_groups": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/CPCGroupLookupRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "cpc_groups"
    ]
   },
   "CPCSubClassLookupRecord": {
    "type": "object",
    "properties": {
     "cpc_subclass_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "cpc_subclass_title": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "cpc_class_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "cpc_class": {
      "type": [
       "string",
       "null"
      ],
      "format": "uri",
      "description": "Link to the detail record: https://patentref.io/api/v1/cpc_class/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
      "x-patentref-kind": "keyword"
     },
     "cpc_subclass_first_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "cpc_subclass_last_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "cpc_subclass_years_active": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "cpc_subclass_num_patents": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "cpc_subclass_num_assignees": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "cpc_subclass_num_inventors": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     }
    }
   },
   "CPCSubClassLookupFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "cpc_subclass_id",
      "cpc_subclass_title",
      "cpc_class_id",
      "cpc_class",
      "cpc_subclass_first_seen_date",
      "cpc_subclass_last_seen_date",
      "cpc_subclass_years_active",
      "cpc_subclass_num_patents",
      "cpc_subclass_num_assignees",
      "cpc_subclass_num_inventors"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "CPCSubClassLookupSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "cpc_subclass_id",
       "cpc_class_id",
       "cpc_subclass_first_seen_date",
       "cpc_subclass_last_seen_date",
       "cpc_subclass_years_active",
       "cpc_subclass_num_patents",
       "cpc_subclass_num_assignees",
       "cpc_subclass_num_inventors"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "CPCSubClassLookupResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "cpc_subclasses": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/CPCSubClassLookupRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "cpc_subclasses"
    ]
   },
   "GBrfSumTextRecord": {
    "type": "object",
    "properties": {
     "patent_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "summary_text": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     }
    }
   },
   "GBrfSumTextFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "patent_id",
      "summary_text"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "GBrfSumTextSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "patent_id"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "GBrfSumTextResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "g_brf_sum_texts": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/GBrfSumTextRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "g_brf_sum_texts"
    ]
   },
   "GClaimRecord": {
    "type": "object",
    "properties": {
     "patent_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "claim_number": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "claim_dependent": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "claim_text": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "claim_sequence": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "exemplary": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     }
    }
   },
   "GClaimFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "patent_id",
      "claim_number",
      "claim_dependent",
      "claim_text",
      "claim_sequence",
      "exemplary"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "GClaimSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "patent_id",
       "claim_number",
       "claim_dependent",
       "claim_sequence",
       "exemplary"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "GClaimResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "g_claims": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/GClaimRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "g_claims"
    ]
   },
   "GDetailDescTextRecord": {
    "type": "object",
    "properties": {
     "patent_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "description_text": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "description_length": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     }
    }
   },
   "GDetailDescTextFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "patent_id",
      "description_text",
      "description_length"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "GDetailDescTextSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "patent_id",
       "description_length"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "GDetailDescTextResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "g_detail_desc_texts": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/GDetailDescTextRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "g_detail_desc_texts"
    ]
   },
   "GDrawDescTextRecord": {
    "type": "object",
    "properties": {
     "patent_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "draw_desc_text": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "draw_desc_sequence": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     }
    }
   },
   "GDrawDescTextFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "patent_id",
      "draw_desc_text",
      "draw_desc_sequence"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "GDrawDescTextSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "patent_id",
       "draw_desc_sequence"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "GDrawDescTextResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "g_draw_desc_texts": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/GDrawDescTextRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "g_draw_desc_texts"
    ]
   },
   "InventorRecord": {
    "type": "object",
    "properties": {
     "inventor_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "inventor_name_first": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text+keyword",
      "description": "Kind: text with a keyword form."
     },
     "inventor_name_last": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text+keyword",
      "description": "Kind: text with a keyword form."
     },
     "inventor_gender_code": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "inventor_lastknown_city": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "inventor_lastknown_state": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "inventor_lastknown_country": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "An ISO 3166-1 alpha-2 country code in capitals, as PatentsView gives it: the United Kingdom is \"GB\", and \"UK\" matches nothing. Kind: text."
     },
     "inventor_lastknown_latitude": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "inventor_lastknown_longitude": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "inventor_lastknown_location": {
      "type": [
       "string",
       "null"
      ],
      "format": "uri",
      "description": "Link to the detail record: https://patentref.io/api/v1/location/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
      "x-patentref-kind": "keyword"
     },
     "inventor_num_patents": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "inventor_num_assignees": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "inventor_first_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "inventor_last_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "inventor_years_active": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "inventor_years": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "year": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "num_patents": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        }
       }
      },
      "description": "Nested group: name it in f (\"inventor_years\") for every field of the group, or \"inventor_years.<field>\" for one; query its fields in q with the same dotted names."
     }
    }
   },
   "InventorFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "inventor_id",
      "inventor_name_first",
      "inventor_name_last",
      "inventor_gender_code",
      "inventor_lastknown_city",
      "inventor_lastknown_state",
      "inventor_lastknown_country",
      "inventor_lastknown_latitude",
      "inventor_lastknown_longitude",
      "inventor_lastknown_location",
      "inventor_num_patents",
      "inventor_num_assignees",
      "inventor_first_seen_date",
      "inventor_last_seen_date",
      "inventor_years_active",
      "inventor_years",
      "inventor_years.year",
      "inventor_years.num_patents"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "InventorSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "inventor_id",
       "inventor_name_first",
       "inventor_name_last",
       "inventor_gender_code",
       "inventor_lastknown_latitude",
       "inventor_lastknown_longitude",
       "inventor_num_patents",
       "inventor_num_assignees",
       "inventor_first_seen_date",
       "inventor_last_seen_date",
       "inventor_years_active"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "InventorResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "inventors": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/InventorRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "inventors"
    ]
   },
   "IPCRRecord": {
    "type": "object",
    "properties": {
     "ipc_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "ipc_section": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "ipc_class": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "ipc_subclass": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     }
    }
   },
   "IPCRFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "ipc_id",
      "ipc_section",
      "ipc_class",
      "ipc_subclass"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "IPCRSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "ipc_id",
       "ipc_section",
       "ipc_class",
       "ipc_subclass"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "IPCRResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "ipcr": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/IPCRRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "ipcr"
    ]
   },
   "LocationRecord": {
    "type": "object",
    "properties": {
     "location_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "location_name": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text+keyword",
      "description": "Kind: text with a keyword form."
     },
     "location_county": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text+keyword",
      "description": "Kind: text with a keyword form."
     },
     "location_county_fips": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "location_state": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text+keyword",
      "description": "Kind: text with a keyword form."
     },
     "location_state_fips": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "location_country": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text+keyword",
      "description": "An ISO 3166-1 alpha-2 country code in capitals, as PatentsView gives it: the United Kingdom is \"GB\", and \"UK\" matches nothing. Kind: text with a keyword form."
     },
     "location_place_type": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "location_latitude": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "location_longitude": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "location_num_assignees": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "location_num_patents": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "location_num_inventors": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     }
    }
   },
   "LocationFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "location_id",
      "location_name",
      "location_county",
      "location_county_fips",
      "location_state",
      "location_state_fips",
      "location_country",
      "location_place_type",
      "location_latitude",
      "location_longitude",
      "location_num_assignees",
      "location_num_patents",
      "location_num_inventors"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "LocationSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "location_id",
       "location_name",
       "location_county",
       "location_county_fips",
       "location_state",
       "location_state_fips",
       "location_country",
       "location_place_type",
       "location_latitude",
       "location_longitude",
       "location_num_assignees",
       "location_num_patents",
       "location_num_inventors"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "LocationResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "locations": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/LocationRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "locations"
    ]
   },
   "NBERCategoryLookupRecord": {
    "type": "object",
    "properties": {
     "nber_category_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "nber_category_title": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     }
    }
   },
   "NBERCategoryLookupFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "nber_category_id",
      "nber_category_title"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "NBERCategoryLookupSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "nber_category_id"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "NBERCategoryLookupResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "nber_categories": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/NBERCategoryLookupRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "nber_categories"
    ]
   },
   "NBERSubcategoryLookupRecord": {
    "type": "object",
    "properties": {
     "nber_subcategory_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "nber_subcategory_title": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "nber_subcategory_num_patents": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "nber_subcategory_num_assignees": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "nber_subcategory_num_inventors": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "nber_subcategory_first_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "nber_subcategory_last_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "nber_subcategory_years_active": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "nber_category": {
      "type": [
       "string",
       "null"
      ],
      "format": "uri",
      "description": "Link to the detail record: https://patentref.io/api/v1/nber_category/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: none: the index has no search field for it, so a query on it matches nothing, as upstream; query the id field of the group instead. It comes back beside that id: f naming the id field or the whole group returns both, and f naming this link alone returns nothing.",
      "x-patentref-kind": "none"
     }
    }
   },
   "NBERSubcategoryLookupFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "nber_subcategory_id",
      "nber_subcategory_title",
      "nber_subcategory_num_patents",
      "nber_subcategory_num_assignees",
      "nber_subcategory_num_inventors",
      "nber_subcategory_first_seen_date",
      "nber_subcategory_last_seen_date",
      "nber_subcategory_years_active",
      "nber_category"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "NBERSubcategoryLookupSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "nber_subcategory_id"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "NBERSubcategoryLookupResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "nber_subcategories": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/NBERSubcategoryLookupRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "nber_subcategories"
    ]
   },
   "PatentRecord": {
    "type": "object",
    "properties": {
     "patent_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "patent_title": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "patent_type": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "patent_country": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "patent_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "patent_year": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "patent_abstract": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "patent_cpc_current_group_average_patent_processing_days": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "withdrawn": {
      "type": [
       "boolean",
       "null"
      ],
      "x-patentref-kind": "boolean",
      "description": "Kind: boolean."
     },
     "patent_detail_desc_length": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "patent_earliest_application_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "patent_num_foreign_documents_cited": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "patent_num_times_cited_by_us_patents": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "patent_num_total_documents_cited": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "patent_num_us_applications_cited": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "patent_num_us_patents_cited": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "patent_processing_days": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "patent_term_extension": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "gov_interest_statement": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "patent_uspc_current_mainclass_average_patent_processing_days": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "wipo_kind": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "application": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "application_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "application_type": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "filing_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "series_code": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "rule_47_flag": {
         "type": [
          "boolean",
          "null"
         ],
         "x-patentref-kind": "boolean",
         "description": "Kind: boolean."
        },
        "filing_type": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        }
       }
      },
      "description": "Nested group: name it in f (\"application\") for every field of the group, or \"application.<field>\" for one; query its fields in q with the same dotted names."
     },
     "applicants": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "applicant_name_first": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "applicant_name_last": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "applicant_organization": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "applicant_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "applicant_designation": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "applicant_type": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "location_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        }
       }
      },
      "description": "Nested group: name it in f (\"applicants\") for every field of the group, or \"applicants.<field>\" for one; query its fields in q with the same dotted names."
     },
     "assignees": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "assignee": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/assignee/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: none: the index has no search field for it, so a query on it matches nothing, as upstream; query the id field of the group instead. It comes back beside that id: f naming the id field or the whole group returns both, and f naming this link alone returns nothing.",
         "x-patentref-kind": "none"
        },
        "assignee_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "assignee_type": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "assignee_individual_name_first": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "assignee_individual_name_last": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "assignee_organization": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "assignee_location_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "assignee_city": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "assignee_state": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "assignee_country": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "An ISO 3166-1 alpha-2 country code in capitals, as PatentsView gives it: the United Kingdom is \"GB\", and \"UK\" matches nothing. Kind: text with a keyword form."
        },
        "assignee_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "disambiguated": {
         "type": "boolean",
         "x-patentref-kind": "boolean",
         "description": "PatentRef addition: false on rows of weekly grants that no PatentsView release covers yet (names as printed; the ids and what derives from them, such as the links, location ids and the inventor gender code, null); true on PatentsView rows. Present only when f names it (assignees.disambiguated), then on every row; a whole group carries the upstream fields only, so every row of a group has the same keys."
        },
        "raw_assignee_individual_name_first": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "f-only",
         "description": "PatentRef addition: the first name as printed on this patent's grant (PatentsView g_assignee_not_disambiguated, and the USPTO weekly grant full text for the weeks no PatentsView release covers yet), beside the disambiguated name, which is PatentsView's one label for a whole cluster of names. Present only when f names it (assignees.raw_assignee_individual_name_first), then on every row; null where the bulk data has none or the data in service predates it. A whole group carries the upstream fields only. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q."
        },
        "raw_assignee_individual_name_last": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "f-only",
         "description": "PatentRef addition: the last name as printed on this patent's grant (PatentsView g_assignee_not_disambiguated, and the USPTO weekly grant full text for the weeks no PatentsView release covers yet), beside the disambiguated name, which is PatentsView's one label for a whole cluster of names. Present only when f names it (assignees.raw_assignee_individual_name_last), then on every row; null where the bulk data has none or the data in service predates it. A whole group carries the upstream fields only. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q."
        },
        "raw_assignee_organization": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "f-only",
         "description": "PatentRef addition: the organization's name as printed on this patent's grant (PatentsView g_assignee_not_disambiguated, and the USPTO weekly grant full text for the weeks no PatentsView release covers yet), beside the disambiguated name, which is PatentsView's one label for a whole cluster of names. Present only when f names it (assignees.raw_assignee_organization), then on every row; null where the bulk data has none or the data in service predates it. A whole group carries the upstream fields only. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q."
        }
       }
      },
      "description": "Nested group: name it in f (\"assignees\") for every field of the group, or \"assignees.<field>\" for one; query its fields in q with the same dotted names."
     },
     "attorneys": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "attorney_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "attorney_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "attorney_name_first": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "attorney_name_last": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "attorney_organization": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "disambiguated": {
         "type": "boolean",
         "x-patentref-kind": "boolean",
         "description": "PatentRef addition: false on rows of weekly grants that no PatentsView release covers yet (names as printed; the ids and what derives from them, such as the links, location ids and the inventor gender code, null); true on PatentsView rows. Present only when f names it (attorneys.disambiguated), then on every row; a whole group carries the upstream fields only, so every row of a group has the same keys."
        }
       }
      },
      "description": "Nested group: name it in f (\"attorneys\") for every field of the group, or \"attorneys.<field>\" for one; query its fields in q with the same dotted names."
     },
     "botanic": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "latin_name": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "variety": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        }
       }
      },
      "description": "Nested group: name it in f (\"botanic\") for every field of the group, or \"botanic.<field>\" for one; query its fields in q with the same dotted names."
     },
     "cpc_at_issue": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "cpc_sequence": {
         "type": [
          "number",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "cpc_section_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "none",
         "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
        },
        "cpc_class": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/cpc_class/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "cpc_class_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "cpc_subclass": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/cpc_subclass/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "cpc_subclass_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "cpc_group": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/cpc_group/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "cpc_group_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "patent_number": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "none",
         "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
        }
       }
      },
      "description": "Nested group: name it in f (\"cpc_at_issue\") for every field of the group, or \"cpc_at_issue.<field>\" for one; query its fields in q with the same dotted names."
     },
     "cpc_current": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "cpc_sequence": {
         "type": [
          "number",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "cpc_section_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "none",
         "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
        },
        "cpc_class": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/cpc_class/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "cpc_class_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "cpc_subclass": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/cpc_subclass/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "cpc_subclass_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "cpc_group": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/cpc_group/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "cpc_group_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "patent_number": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "none",
         "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
        }
       }
      },
      "description": "Nested group: name it in f (\"cpc_current\") for every field of the group, or \"cpc_current.<field>\" for one; query its fields in q with the same dotted names."
     },
     "examiners": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "examiner_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "examiner_first_name": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "examiner_last_name": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "examiner_role": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "art_group": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        }
       }
      },
      "description": "Nested group: name it in f (\"examiners\") for every field of the group, or \"examiners.<field>\" for one; query its fields in q with the same dotted names."
     },
     "foreign_priority": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "priority_claim_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "priority_claim_kind": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "foreign_application_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "filing_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "foreign_country_filed": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "The two-letter office code printed on the grant: mostly the WIPO codes (GB, EP for the European Patent Office, WO for international applications), with \"UK\" on some older rows. Kind: keyword."
        }
       }
      },
      "description": "Nested group: name it in f (\"foreign_priority\") for every field of the group, or \"foreign_priority.<field>\" for one; query its fields in q with the same dotted names."
     },
     "figures": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "num_figures": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "num_sheets": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        }
       }
      },
      "description": "Nested group: name it in f (\"figures\") for every field of the group, or \"figures.<field>\" for one; query its fields in q with the same dotted names."
     },
     "gov_interest_contract_award_numbers": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "award_number": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        }
       }
      },
      "description": "Nested group: name it in f (\"gov_interest_contract_award_numbers\") for every field of the group, or \"gov_interest_contract_award_numbers.<field>\" for one; query its fields in q with the same dotted names."
     },
     "gov_interest_organizations": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "fedagency_name": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "level_one": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "level_two": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "level_three": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        }
       }
      },
      "description": "Nested group: name it in f (\"gov_interest_organizations\") for every field of the group, or \"gov_interest_organizations.<field>\" for one; query its fields in q with the same dotted names."
     },
     "granted_pregrant_crosswalk": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "patent_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "none",
         "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
        },
        "document_number": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "pgpubs_document_number": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "none",
         "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
        },
        "application_number": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        }
       }
      },
      "description": "Nested group: name it in f (\"granted_pregrant_crosswalk\") for every field of the group, or \"granted_pregrant_crosswalk.<field>\" for one; query its fields in q with the same dotted names."
     },
     "inventors": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "inventor": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/inventor/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: none: the index has no search field for it, so a query on it matches nothing, as upstream; query the id field of the group instead. It comes back beside that id: f naming the id field or the whole group returns both, and f naming this link alone returns nothing.",
         "x-patentref-kind": "none"
        },
        "inventor_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "inventor_name_first": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "inventor_name_last": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "inventor_gender_code": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "inventor_location_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "inventor_city": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "inventor_state": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "inventor_country": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "An ISO 3166-1 alpha-2 country code in capitals, as PatentsView gives it: the United Kingdom is \"GB\", and \"UK\" matches nothing. Kind: text with a keyword form."
        },
        "inventor_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "disambiguated": {
         "type": "boolean",
         "x-patentref-kind": "boolean",
         "description": "PatentRef addition: false on rows of weekly grants that no PatentsView release covers yet (names as printed; the ids and what derives from them, such as the links, location ids and the inventor gender code, null); true on PatentsView rows. Present only when f names it (inventors.disambiguated), then on every row; a whole group carries the upstream fields only, so every row of a group has the same keys."
        }
       }
      },
      "description": "Nested group: name it in f (\"inventors\") for every field of the group, or \"inventors.<field>\" for one; query its fields in q with the same dotted names."
     },
     "ipcr": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "ipc_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "ipc_action_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "ipc_section": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_class": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_subclass": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_main_group": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_subgroup": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_symbol_position": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_classification_data_source": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_classification_value": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        }
       }
      },
      "description": "Nested group: name it in f (\"ipcr\") for every field of the group, or \"ipcr.<field>\" for one; query its fields in q with the same dotted names."
     },
     "pct_data": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "published_filed_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "pct_102_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "pct_371_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "application_kind": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "pct_doc_number": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "pct_doc_type": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        }
       }
      },
      "description": "Nested group: name it in f (\"pct_data\") for every field of the group, or \"pct_data.<field>\" for one; query its fields in q with the same dotted names."
     },
     "us_related_documents": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "related_doc_type": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "related_doc_kind": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "related_doc_number": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "published_country": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "The two-letter office code printed on the grant: mostly the WIPO codes (GB, EP for the European Patent Office, WO for international applications), with \"UK\" on some older rows. Kind: keyword."
        },
        "related_doc_published_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "related_doc_status": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "related_doc_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "wipo_kind": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        }
       }
      },
      "description": "Nested group: name it in f (\"us_related_documents\") for every field of the group, or \"us_related_documents.<field>\" for one; query its fields in q with the same dotted names."
     },
     "us_term_of_grant": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "term_grant": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "term_extension": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "term_disclaimer": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "disclaimer_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        }
       }
      },
      "description": "Nested group: name it in f (\"us_term_of_grant\") for every field of the group, or \"us_term_of_grant.<field>\" for one; query its fields in q with the same dotted names."
     },
     "uspc_at_issue": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "uspc_mainclass": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/uspc_mainclass/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "uspc_mainclass_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "uspc_subclass": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/uspc_subclass/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "uspc_subclass_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "uspc_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        }
       }
      },
      "description": "Nested group: name it in f (\"uspc_at_issue\") for every field of the group, or \"uspc_at_issue.<field>\" for one; query its fields in q with the same dotted names."
     },
     "wipo": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "wipo_field": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/wipo/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "wipo_field_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "wipo_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        }
       }
      },
      "description": "Nested group: name it in f (\"wipo\") for every field of the group, or \"wipo.<field>\" for one; query its fields in q with the same dotted names."
     },
     "lapse": {
      "type": "array",
      "maxItems": 1,
      "description": "PatentRef addition: expiry and maintenance-fee facts of the patent, one object in a list like every nested group. Returned only when f names it (\"lapse\" or \"lapse.<field>\"); not in the default fields. It cannot be used in q or s (400 ERR_Q: q gives the reason \"the 'lapse' group is returned with f only\", s \"Invalid field: lapse.<field>\"). Record facts with their basis and an as-of date, never a legal conclusion.",
      "items": {
       "type": "object",
       "properties": {
        "expiry_status": {
         "type": "string",
         "enum": [
          "active",
          "expired_term",
          "expired_fee_nonpayment",
          "withdrawn",
          "unknown"
         ],
         "description": "Status from the record facts: the term end computed from the dates, and the maintenance-fee events. A maintenance-fee lapse whose 6-month grace period ran out after the computed term end gives expired_term, not expired_fee_nonpayment, and the basis keeps fee_lapse:<YYYY-MM-DD>. Where the USPTO 35 USC 156 list gives an earlier term end than the record's dates and the record shows no terminal disclaimer, the later of the two is the computed term end for this test; if only one of the two has passed, the status is unknown, or expired_fee_nonpayment when the fee record shows an unreinstated lapse whose grace period ran out before the later date. Where the record contradicts the filing date of a parent the term could count from and PatentRef holds no other USPTO record that gives that date, there is no computed term end: the status is the one the record's dates give on the date the row gives, when that date is a possible filing date, and on every filing date the parent's number allows (from 1978-06-01 when the number names no possible year or a serial its office never reached in that year), and unknown when those give different statuses. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        },
        "expiry_date_estimated": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "description": "End of the statutory term, computed (35 USC 154) from dates in the USPTO record; not a date the record prints. Utility and plant patents: 20 years from the filing date (for a national stage under 35 USC 371, its international filing date, 35 USC 363), or from the earliest filing date of a parent application the record lists (continuation, division or continuation-in-part, including a parent international application the record lists as a related publication; a provisional or foreign priority date does not count), plus the patent term adjustment. A parent's filing date that the record itself contradicts is not used: an international application dated outside the year its number names (PCT/CCYYYY/; PCT/CCYY/ names its year up to 2003, and a later number written that way is read as 20YY when the row's date falls in that year; a number written without one or both slashes, such as PCTGB9300583, is read as PCT/GB93/00583) or before 1978-06-01, or whose number names no possible filing year (including a later PCT/CCYY/ number dated outside 20YY), or a US application dated outside the years in which applications of its serial number's series were filed; PatentRef also does not use a US parent date before 1950. The filing date another USPTO record PatentRef holds gives for the same application counts instead (another row of the same record, the international filing date in the record of its national stage, or the filing date in the record of the patent granted on it); when none does and that parent could be the earliest, this field is null. Filed before 1995-06-08: 17 years from grant when that ends before 1995-06-08 or after the 20-year date, else the 20-year date (basis then names term_17y or term_20y, whichever applied). Design patents: 14 years from grant, 15 when filed on or after 2015-05-13. A dated terminal disclaimer ends the term at its date. A patent or reissue on the USPTO list of patent terms extended under 35 USC 156 takes the list's original expiration date plus the extension the list gives (basis pte_156:<days>); an extension only adds to the original term (35 USC 156(a)), so where the list's date is earlier than the term computed from the record and the record shows no terminal disclaimer, the two disagree, and when only one of the two dates has passed this field is null and the status is unknown, or expired_fee_nonpayment when the fee record shows an unreinstated lapse whose grace period ran out before the later date. Not counted: a terminal disclaimer that ties the term to another patent, an extension the list does not name (an interim extension, or one granted after the list's update date), and any change to the adjustment after grant. Null for a patent withdrawn from issue, for a reissue not on the list, and when the record lacks the dates. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        },
        "expiry_basis": {
         "type": "array",
         "items": {
          "type": "string"
         },
         "description": "Basis codes: term_20y, term_17y, term_14y, term_15y (the term rule that applied), pta_days:<N> (patent term adjustment), terminal_disclaimer, fee_lapse:<YYYY-MM-DD> (the date of the maintenance-fee record's expiry entry for non-payment), reinstated:<YYYY-MM-DD> (a later reinstatement, EXPX or PMFG in the fee record), pte_156:<N> (the patent is on the USPTO list of patent terms extended under 35 USC 156; N is the extension in days, added to the list's original expiration date). Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        },
        "reinstatement_possible": {
         "enum": [
          true,
          false,
          "unknown"
         ],
         "description": "37 CFR 1.378: false once the term has ended or nothing lapsed; \"unknown\" for an unreinstated fee lapse. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        },
        "fee_status": {
         "type": [
          "string",
          "null"
         ],
         "description": "\"lapsed\" when the USPTO maintenance-fee record shows an expiry for non-payment with no later reinstatement; null otherwise. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        },
        "lapse_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "description": "Date of the expiry entry (EXP.) in the maintenance-fee record. The patent expired at the end of the fee's 6-month grace period (35 USC 41(b)), which is this date or earlier. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        },
        "reinstated_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "description": "Date of the last reinstatement event (EXPX or PMFG) in the fee record. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        },
        "prior": {
         "type": [
          "number",
          "null"
         ],
         "description": "Lapse history-match score (sum of log2 lifts of the traits that fired); null until the scores are computed on the server. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        },
        "prior_pct": {
         "type": [
          "number",
          "null"
         ],
         "description": "Percentile of prior among the expired patents that are still quiet (0 to 100); null until computed. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        },
        "fwd_early": {
         "type": [
          "integer",
          "null"
         ],
         "description": "Direct forward citations within 10 years of grant: US utility patents citing it, in PatentsView and in the weekly grants added after it. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        },
        "fwd_late": {
         "type": [
          "integer",
          "null"
         ],
         "description": "Direct forward citations 15 or more years after grant, counted as fwd_early is. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        },
        "sleeper_flag": {
         "type": "boolean",
         "description": "Expired, and quiet: at most 5 forward citations and at most 1 recent one. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        },
        "as_of": {
         "type": "string",
         "format": "date",
         "description": "As-of date of the data the record was computed from (the release date of the build). Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        },
        "data_version": {
         "type": "string",
         "description": "data_version of the Lapse catalog the group was read from. Kind: f-only. Returned when f names it; q or s on it answers 400 ERR_Q.",
         "x-patentref-kind": "f-only"
        }
       }
      }
     }
    }
   },
   "PatentFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "patent_id",
      "patent_title",
      "patent_type",
      "patent_country",
      "patent_date",
      "patent_year",
      "patent_abstract",
      "patent_cpc_current_group_average_patent_processing_days",
      "withdrawn",
      "patent_detail_desc_length",
      "patent_earliest_application_date",
      "patent_num_foreign_documents_cited",
      "patent_num_times_cited_by_us_patents",
      "patent_num_total_documents_cited",
      "patent_num_us_applications_cited",
      "patent_num_us_patents_cited",
      "patent_processing_days",
      "patent_term_extension",
      "gov_interest_statement",
      "patent_uspc_current_mainclass_average_patent_processing_days",
      "wipo_kind",
      "application",
      "application.application_id",
      "application.application_type",
      "application.filing_date",
      "application.series_code",
      "application.rule_47_flag",
      "application.filing_type",
      "applicants",
      "applicants.applicant_name_first",
      "applicants.applicant_name_last",
      "applicants.applicant_organization",
      "applicants.applicant_sequence",
      "applicants.applicant_designation",
      "applicants.applicant_type",
      "applicants.location_id",
      "assignees",
      "assignees.assignee",
      "assignees.assignee_id",
      "assignees.assignee_type",
      "assignees.assignee_individual_name_first",
      "assignees.assignee_individual_name_last",
      "assignees.assignee_organization",
      "assignees.assignee_location_id",
      "assignees.assignee_city",
      "assignees.assignee_state",
      "assignees.assignee_country",
      "assignees.assignee_sequence",
      "attorneys",
      "attorneys.attorney_id",
      "attorneys.attorney_sequence",
      "attorneys.attorney_name_first",
      "attorneys.attorney_name_last",
      "attorneys.attorney_organization",
      "botanic",
      "botanic.latin_name",
      "botanic.variety",
      "cpc_at_issue",
      "cpc_at_issue.cpc_sequence",
      "cpc_at_issue.cpc_section_id",
      "cpc_at_issue.cpc_class",
      "cpc_at_issue.cpc_class_id",
      "cpc_at_issue.cpc_subclass",
      "cpc_at_issue.cpc_subclass_id",
      "cpc_at_issue.cpc_group",
      "cpc_at_issue.cpc_group_id",
      "cpc_at_issue.patent_number",
      "cpc_current",
      "cpc_current.cpc_sequence",
      "cpc_current.cpc_section_id",
      "cpc_current.cpc_class",
      "cpc_current.cpc_class_id",
      "cpc_current.cpc_subclass",
      "cpc_current.cpc_subclass_id",
      "cpc_current.cpc_group",
      "cpc_current.cpc_group_id",
      "cpc_current.patent_number",
      "examiners",
      "examiners.examiner_id",
      "examiners.examiner_first_name",
      "examiners.examiner_last_name",
      "examiners.examiner_role",
      "examiners.art_group",
      "foreign_priority",
      "foreign_priority.priority_claim_sequence",
      "foreign_priority.priority_claim_kind",
      "foreign_priority.foreign_application_id",
      "foreign_priority.filing_date",
      "foreign_priority.foreign_country_filed",
      "figures",
      "figures.num_figures",
      "figures.num_sheets",
      "gov_interest_contract_award_numbers",
      "gov_interest_contract_award_numbers.award_number",
      "gov_interest_organizations",
      "gov_interest_organizations.fedagency_name",
      "gov_interest_organizations.level_one",
      "gov_interest_organizations.level_two",
      "gov_interest_organizations.level_three",
      "granted_pregrant_crosswalk",
      "granted_pregrant_crosswalk.patent_id",
      "granted_pregrant_crosswalk.document_number",
      "granted_pregrant_crosswalk.pgpubs_document_number",
      "granted_pregrant_crosswalk.application_number",
      "inventors",
      "inventors.inventor",
      "inventors.inventor_id",
      "inventors.inventor_name_first",
      "inventors.inventor_name_last",
      "inventors.inventor_gender_code",
      "inventors.inventor_location_id",
      "inventors.inventor_city",
      "inventors.inventor_state",
      "inventors.inventor_country",
      "inventors.inventor_sequence",
      "ipcr",
      "ipcr.ipc_id",
      "ipcr.ipc_sequence",
      "ipcr.ipc_action_date",
      "ipcr.ipc_section",
      "ipcr.ipc_class",
      "ipcr.ipc_subclass",
      "ipcr.ipc_main_group",
      "ipcr.ipc_subgroup",
      "ipcr.ipc_symbol_position",
      "ipcr.ipc_classification_data_source",
      "ipcr.ipc_classification_value",
      "pct_data",
      "pct_data.published_filed_date",
      "pct_data.pct_102_date",
      "pct_data.pct_371_date",
      "pct_data.application_kind",
      "pct_data.pct_doc_number",
      "pct_data.pct_doc_type",
      "us_related_documents",
      "us_related_documents.related_doc_type",
      "us_related_documents.related_doc_kind",
      "us_related_documents.related_doc_number",
      "us_related_documents.published_country",
      "us_related_documents.related_doc_published_date",
      "us_related_documents.related_doc_status",
      "us_related_documents.related_doc_sequence",
      "us_related_documents.wipo_kind",
      "us_term_of_grant",
      "us_term_of_grant.term_grant",
      "us_term_of_grant.term_extension",
      "us_term_of_grant.term_disclaimer",
      "us_term_of_grant.disclaimer_date",
      "uspc_at_issue",
      "uspc_at_issue.uspc_mainclass",
      "uspc_at_issue.uspc_mainclass_id",
      "uspc_at_issue.uspc_subclass",
      "uspc_at_issue.uspc_subclass_id",
      "uspc_at_issue.uspc_sequence",
      "wipo",
      "wipo.wipo_field",
      "wipo.wipo_field_id",
      "wipo.wipo_sequence",
      "lapse",
      "lapse.expiry_status",
      "lapse.expiry_date_estimated",
      "lapse.expiry_basis",
      "lapse.reinstatement_possible",
      "lapse.fee_status",
      "lapse.lapse_date",
      "lapse.reinstated_date",
      "lapse.prior",
      "lapse.prior_pct",
      "lapse.fwd_early",
      "lapse.fwd_late",
      "lapse.sleeper_flag",
      "lapse.as_of",
      "lapse.data_version",
      "inventors.disambiguated",
      "assignees.disambiguated",
      "attorneys.disambiguated",
      "assignees.raw_assignee_individual_name_first",
      "assignees.raw_assignee_individual_name_last",
      "assignees.raw_assignee_organization"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "PatentSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "patent_id",
       "patent_type",
       "patent_date",
       "patent_year",
       "patent_cpc_current_group_average_patent_processing_days",
       "withdrawn",
       "patent_detail_desc_length",
       "patent_earliest_application_date",
       "patent_num_foreign_documents_cited",
       "patent_num_times_cited_by_us_patents",
       "patent_num_total_documents_cited",
       "patent_num_us_applications_cited",
       "patent_num_us_patents_cited",
       "patent_processing_days",
       "patent_term_extension",
       "patent_uspc_current_mainclass_average_patent_processing_days",
       "wipo_kind"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "PatentResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "patents": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/PatentRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "patents"
    ]
   },
   "AttorneyRecord": {
    "type": "object",
    "properties": {
     "attorney_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "attorney_name_first": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "attorney_name_last": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "attorney_organization": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text+keyword",
      "description": "Kind: text with a keyword form."
     },
     "attorney_first_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "attorney_last_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "attorney_num_inventors": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "attorney_num_patents": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "attorney_years_active": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     }
    }
   },
   "AttorneyFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "attorney_id",
      "attorney_name_first",
      "attorney_name_last",
      "attorney_organization",
      "attorney_first_seen_date",
      "attorney_last_seen_date",
      "attorney_num_inventors",
      "attorney_num_patents",
      "attorney_years_active"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "AttorneySort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "attorney_id",
       "attorney_name_first",
       "attorney_name_last",
       "attorney_organization",
       "attorney_first_seen_date",
       "attorney_last_seen_date",
       "attorney_num_inventors",
       "attorney_num_patents",
       "attorney_years_active"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "AttorneyResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "attorneys": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/AttorneyRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "attorneys"
    ]
   },
   "ForeignCitationRecord": {
    "type": "object",
    "properties": {
     "patent_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "patent": {
      "type": [
       "string",
       "null"
      ],
      "format": "uri",
      "description": "Link to the detail record: https://patentref.io/api/v1/patent/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
      "x-patentref-kind": "keyword"
     },
     "citation_number": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "citation_sequence": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "citation_date": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "citation_category": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "citation_country": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "The two-letter office code printed on the grant: mostly the WIPO codes (GB, EP for the European Patent Office, WO for international applications), with \"UK\" on some older rows. Kind: keyword."
     }
    }
   },
   "ForeignCitationFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "patent_id",
      "patent",
      "citation_number",
      "citation_sequence",
      "citation_date",
      "citation_category",
      "citation_country"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "ForeignCitationSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "patent_id",
       "citation_number",
       "citation_sequence",
       "citation_date",
       "citation_category",
       "citation_country"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "ForeignCitationResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "foreign_citations": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/ForeignCitationRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "foreign_citations"
    ]
   },
   "OtherReferenceRecord": {
    "type": "object",
    "properties": {
     "uuid": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "patent_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "reference_sequence": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "reference_text": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     }
    }
   },
   "OtherReferenceFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "uuid",
      "patent_id",
      "reference_sequence",
      "reference_text"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "OtherReferenceSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "uuid",
       "patent_id",
       "reference_sequence"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "OtherReferenceResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "other_references": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/OtherReferenceRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "other_references"
    ]
   },
   "RelatedTextRecord": {
    "type": "object",
    "properties": {
     "uuid": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "patent_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "document_number": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "related_text": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     }
    }
   },
   "RelatedTextFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "uuid",
      "id",
      "patent_id",
      "document_number",
      "related_text"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "RelatedTextSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "uuid",
       "patent_id"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "RelatedTextResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "rel_app_texts": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/RelatedTextRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "rel_app_texts"
    ]
   },
   "USApplicationCitationRecord": {
    "type": "object",
    "properties": {
     "patent_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "patent": {
      "type": [
       "string",
       "null"
      ],
      "format": "uri",
      "description": "Link to the detail record: https://patentref.io/api/v1/patent/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
      "x-patentref-kind": "keyword"
     },
     "citation_sequence": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "citation_document_number": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "citation_wipo_kind": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "citation_category": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "citation_date": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "citation_name": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     }
    }
   },
   "USApplicationCitationFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "patent_id",
      "patent",
      "citation_sequence",
      "citation_document_number",
      "citation_wipo_kind",
      "citation_category",
      "citation_date",
      "citation_name"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "USApplicationCitationSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "patent_id",
       "citation_sequence",
       "citation_document_number",
       "citation_wipo_kind",
       "citation_category",
       "citation_date",
       "citation_name"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "USApplicationCitationResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "us_application_citations": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/USApplicationCitationRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "us_application_citations"
    ]
   },
   "USPatentCitationRecord": {
    "type": "object",
    "properties": {
     "patent_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "patent": {
      "type": [
       "string",
       "null"
      ],
      "format": "uri",
      "description": "Link to the detail record: https://patentref.io/api/v1/patent/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
      "x-patentref-kind": "keyword"
     },
     "citation_sequence": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "citation_patent_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "citation_patent": {
      "type": [
       "string",
       "null"
      ],
      "format": "uri",
      "description": "Link to the detail record: https://patentref.io/api/v1/patent/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
      "x-patentref-kind": "keyword"
     },
     "citation_wipo_kind": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "citation_category": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "citation_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "citation_name": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     }
    }
   },
   "USPatentCitationFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "patent_id",
      "patent",
      "citation_sequence",
      "citation_patent_id",
      "citation_patent",
      "citation_wipo_kind",
      "citation_category",
      "citation_date",
      "citation_name"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "USPatentCitationSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "patent_id",
       "citation_sequence",
       "citation_patent_id",
       "citation_wipo_kind",
       "citation_category",
       "citation_date",
       "citation_name"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "USPatentCitationResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "us_patent_citations": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/USPatentCitationRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "us_patent_citations"
    ]
   },
   "PGBrfSumTextRecord": {
    "type": "object",
    "properties": {
     "document_number": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "summary_text": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     }
    }
   },
   "PGBrfSumTextFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "document_number",
      "summary_text"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "PGBrfSumTextSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "document_number"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "PGBrfSumTextResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "pg_brf_sum_texts": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/PGBrfSumTextRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "pg_brf_sum_texts"
    ]
   },
   "PGClaimRecord": {
    "type": "object",
    "properties": {
     "document_number": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "claim_number": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "claim_text": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "claim_sequence": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "claim_dependent": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     }
    }
   },
   "PGClaimFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "document_number",
      "claim_number",
      "claim_text",
      "claim_sequence",
      "claim_dependent"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "PGClaimSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "document_number",
       "claim_number",
       "claim_sequence",
       "claim_dependent"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "PGClaimResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "pg_claims": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/PGClaimRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "pg_claims"
    ]
   },
   "PGDetailDescTextRecord": {
    "type": "object",
    "properties": {
     "document_number": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "description_text": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "description_length": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     }
    }
   },
   "PGDetailDescTextFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "document_number",
      "description_text",
      "description_length"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "PGDetailDescTextSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "document_number",
       "description_length"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "PGDetailDescTextResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "pg_detail_desc_texts": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/PGDetailDescTextRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "pg_detail_desc_texts"
    ]
   },
   "PGDrawDescTextRecord": {
    "type": "object",
    "properties": {
     "document_number": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "draw_desc_text": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "draw_desc_sequence": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     }
    }
   },
   "PGDrawDescTextFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "document_number",
      "draw_desc_text",
      "draw_desc_sequence"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "PGDrawDescTextSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "document_number",
       "draw_desc_sequence"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "PGDrawDescTextResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "pg_draw_desc_texts": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/PGDrawDescTextRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "pg_draw_desc_texts"
    ]
   },
   "PublicationRecord": {
    "type": "object",
    "properties": {
     "document_number": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "publication_title": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "publication_type": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "publication_country": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "publication_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "publication_year": {
      "type": [
       "number",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "publication_abstract": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "publication_kind": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "publication_application_number": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "none",
      "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
     },
     "series_code": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "rule_47_flag": {
      "type": [
       "boolean",
       "null"
      ],
      "x-patentref-kind": "boolean",
      "description": "Kind: boolean."
     },
     "assignees": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "assignee": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/assignee/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: none: the index has no search field for it, so a query on it matches nothing, as upstream; query the id field of the group instead. It comes back beside that id: f naming the id field or the whole group returns both, and f naming this link alone returns nothing.",
         "x-patentref-kind": "none"
        },
        "assignee_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "assignee_type": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "assignee_individual_name_first": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "assignee_individual_name_last": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "assignee_organization": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "assignee_location_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "assignee_city": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "assignee_state": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "assignee_country": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "An ISO 3166-1 alpha-2 country code in capitals, as PatentsView gives it: the United Kingdom is \"GB\", and \"UK\" matches nothing. Kind: text with a keyword form."
        },
        "assignee_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        }
       }
      },
      "description": "Nested group: name it in f (\"assignees\") for every field of the group, or \"assignees.<field>\" for one; query its fields in q with the same dotted names."
     },
     "cpc_at_issue": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "cpc_sequence": {
         "type": [
          "number",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "cpc_section_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "none",
         "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
        },
        "cpc_class": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/cpc_class/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "cpc_class_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "cpc_subclass": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/cpc_subclass/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "cpc_subclass_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "cpc_group": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/cpc_group/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "cpc_group_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "action_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "document_number": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "none",
         "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
        }
       }
      },
      "description": "Nested group: name it in f (\"cpc_at_issue\") for every field of the group, or \"cpc_at_issue.<field>\" for one; query its fields in q with the same dotted names."
     },
     "cpc_current": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "cpc_sequence": {
         "type": [
          "number",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "cpc_section_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "none",
         "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
        },
        "cpc_class": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/cpc_class/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "cpc_class_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "cpc_subclass": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/cpc_subclass/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "cpc_subclass_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "cpc_group": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/cpc_group/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "cpc_group_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "action_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "none",
         "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
        },
        "document_number": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "none",
         "description": "Kind: none. Serialized by the API but has no field in the search index: a query on it matches nothing, as upstream."
        }
       }
      },
      "description": "Nested group: name it in f (\"cpc_current\") for every field of the group, or \"cpc_current.<field>\" for one; query its fields in q with the same dotted names."
     },
     "foreign_priority": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "priority_claim_kind": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "foreign_application_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "filing_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "foreign_country_filed": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "The two-letter office code printed on the grant: mostly the WIPO codes (GB, EP for the European Patent Office, WO for international applications), with \"UK\" on some older rows. Kind: keyword."
        },
        "priority_claim_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        }
       }
      },
      "description": "Nested group: name it in f (\"foreign_priority\") for every field of the group, or \"foreign_priority.<field>\" for one; query its fields in q with the same dotted names."
     },
     "gov_interest_organizations": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "fedagency_name": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "level_one": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "level_two": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "level_three": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        }
       }
      },
      "description": "Nested group: name it in f (\"gov_interest_organizations\") for every field of the group, or \"gov_interest_organizations.<field>\" for one; query its fields in q with the same dotted names."
     },
     "granted_pregrant_crosswalk": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "patent_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "document_number": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "application_number": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "current_document_number_flag": {
         "type": [
          "boolean",
          "null"
         ],
         "x-patentref-kind": "boolean",
         "description": "Kind: boolean."
        },
        "current_patent_id_flag": {
         "type": [
          "boolean",
          "null"
         ],
         "x-patentref-kind": "boolean",
         "description": "Kind: boolean."
        }
       }
      },
      "description": "Nested group: name it in f (\"granted_pregrant_crosswalk\") for every field of the group, or \"granted_pregrant_crosswalk.<field>\" for one; query its fields in q with the same dotted names."
     },
     "inventors": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "inventor": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/inventor/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: none: the index has no search field for it, so a query on it matches nothing, as upstream; query the id field of the group instead. It comes back beside that id: f naming the id field or the whole group returns both, and f naming this link alone returns nothing.",
         "x-patentref-kind": "none"
        },
        "inventor_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "inventor_name_first": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "inventor_name_last": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "inventor_gender_code": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "inventor_location_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "inventor_city": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "inventor_state": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "inventor_country": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "An ISO 3166-1 alpha-2 country code in capitals, as PatentsView gives it: the United Kingdom is \"GB\", and \"UK\" matches nothing. Kind: text with a keyword form."
        },
        "inventor_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        }
       }
      },
      "description": "Nested group: name it in f (\"inventors\") for every field of the group, or \"inventors.<field>\" for one; query its fields in q with the same dotted names."
     },
     "ipcr": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "ipc_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "ipc_action_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "ipc_section": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_class": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_subclass": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_main_group": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_subgroup": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_symbol_position": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_classification_data_source": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_classification_value": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_class_level": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "ipc_class_status": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        }
       }
      },
      "description": "Nested group: name it in f (\"ipcr\") for every field of the group, or \"ipcr.<field>\" for one; query its fields in q with the same dotted names."
     },
     "pct_data": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "published_filed_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "pct_371_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "pct_102_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "application_kind": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "pct_doc_number": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "pct_doc_type": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "filed_country": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "The two-letter office code printed on the grant: mostly the WIPO codes (GB, EP for the European Patent Office, WO for international applications), with \"UK\" on some older rows. Kind: keyword."
        }
       }
      },
      "description": "Nested group: name it in f (\"pct_data\") for every field of the group, or \"pct_data.<field>\" for one; query its fields in q with the same dotted names."
     },
     "us_related_documents": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "related_doc_type": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "related_doc_kind": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "related_doc_number": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "published_country": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "The two-letter office code printed on the grant: mostly the WIPO codes (GB, EP for the European Patent Office, WO for international applications), with \"UK\" on some older rows. Kind: keyword."
        },
        "related_doc_published_date": {
         "type": [
          "string",
          "null"
         ],
         "format": "date",
         "x-patentref-kind": "date",
         "description": "Kind: date."
        },
        "related_doc_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        }
       }
      },
      "description": "Nested group: name it in f (\"us_related_documents\") for every field of the group, or \"us_related_documents.<field>\" for one; query its fields in q with the same dotted names."
     },
     "us_parties": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "us_party_type": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "us_party_designation": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text",
         "description": "Kind: text."
        },
        "location_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "us_party_name_first": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "us_party_name_last": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "us_party_organization": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "text+keyword",
         "description": "Kind: text with a keyword form."
        },
        "us_party_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        },
        "applicant_authority": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        }
       }
      },
      "description": "Nested group: name it in f (\"us_parties\") for every field of the group, or \"us_parties.<field>\" for one; query its fields in q with the same dotted names."
     },
     "uspc_at_issue": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "uspc_mainclass": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/uspc_mainclass/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "uspc_mainclass_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "uspc_subclass": {
         "type": [
          "string",
          "null"
         ],
         "format": "uri",
         "description": "Link to the detail record: https://patentref.io/api/v1/uspc_subclass/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
         "x-patentref-kind": "keyword"
        },
        "uspc_subclass_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "uspc_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        }
       }
      },
      "description": "Nested group: name it in f (\"uspc_at_issue\") for every field of the group, or \"uspc_at_issue.<field>\" for one; query its fields in q with the same dotted names."
     },
     "wipo": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "wipo_field_id": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "wipo_field": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "wipo_sector_title": {
         "type": [
          "string",
          "null"
         ],
         "x-patentref-kind": "keyword",
         "description": "Kind: keyword."
        },
        "wipo_sequence": {
         "type": [
          "integer",
          "null"
         ],
         "x-patentref-kind": "number",
         "description": "Kind: number."
        }
       }
      },
      "description": "Nested group: name it in f (\"wipo\") for every field of the group, or \"wipo.<field>\" for one; query its fields in q with the same dotted names."
     }
    }
   },
   "PublicationFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "document_number",
      "publication_title",
      "publication_type",
      "publication_country",
      "publication_date",
      "publication_year",
      "publication_abstract",
      "publication_kind",
      "publication_application_number",
      "series_code",
      "rule_47_flag",
      "assignees",
      "assignees.assignee",
      "assignees.assignee_id",
      "assignees.assignee_type",
      "assignees.assignee_individual_name_first",
      "assignees.assignee_individual_name_last",
      "assignees.assignee_organization",
      "assignees.assignee_location_id",
      "assignees.assignee_city",
      "assignees.assignee_state",
      "assignees.assignee_country",
      "assignees.assignee_sequence",
      "cpc_at_issue",
      "cpc_at_issue.cpc_sequence",
      "cpc_at_issue.cpc_section_id",
      "cpc_at_issue.cpc_class",
      "cpc_at_issue.cpc_class_id",
      "cpc_at_issue.cpc_subclass",
      "cpc_at_issue.cpc_subclass_id",
      "cpc_at_issue.cpc_group",
      "cpc_at_issue.cpc_group_id",
      "cpc_at_issue.action_date",
      "cpc_at_issue.document_number",
      "cpc_current",
      "cpc_current.cpc_sequence",
      "cpc_current.cpc_section_id",
      "cpc_current.cpc_class",
      "cpc_current.cpc_class_id",
      "cpc_current.cpc_subclass",
      "cpc_current.cpc_subclass_id",
      "cpc_current.cpc_group",
      "cpc_current.cpc_group_id",
      "cpc_current.action_date",
      "cpc_current.document_number",
      "foreign_priority",
      "foreign_priority.priority_claim_kind",
      "foreign_priority.foreign_application_id",
      "foreign_priority.filing_date",
      "foreign_priority.foreign_country_filed",
      "foreign_priority.priority_claim_sequence",
      "gov_interest_organizations",
      "gov_interest_organizations.fedagency_name",
      "gov_interest_organizations.level_one",
      "gov_interest_organizations.level_two",
      "gov_interest_organizations.level_three",
      "granted_pregrant_crosswalk",
      "granted_pregrant_crosswalk.patent_id",
      "granted_pregrant_crosswalk.document_number",
      "granted_pregrant_crosswalk.application_number",
      "granted_pregrant_crosswalk.current_document_number_flag",
      "granted_pregrant_crosswalk.current_patent_id_flag",
      "inventors",
      "inventors.inventor",
      "inventors.inventor_id",
      "inventors.inventor_name_first",
      "inventors.inventor_name_last",
      "inventors.inventor_gender_code",
      "inventors.inventor_location_id",
      "inventors.inventor_city",
      "inventors.inventor_state",
      "inventors.inventor_country",
      "inventors.inventor_sequence",
      "ipcr",
      "ipcr.ipc_id",
      "ipcr.ipc_sequence",
      "ipcr.ipc_action_date",
      "ipcr.ipc_section",
      "ipcr.ipc_class",
      "ipcr.ipc_subclass",
      "ipcr.ipc_main_group",
      "ipcr.ipc_subgroup",
      "ipcr.ipc_symbol_position",
      "ipcr.ipc_classification_data_source",
      "ipcr.ipc_classification_value",
      "ipcr.ipc_class_level",
      "ipcr.ipc_class_status",
      "pct_data",
      "pct_data.published_filed_date",
      "pct_data.pct_371_date",
      "pct_data.pct_102_date",
      "pct_data.application_kind",
      "pct_data.pct_doc_number",
      "pct_data.pct_doc_type",
      "pct_data.filed_country",
      "us_related_documents",
      "us_related_documents.related_doc_type",
      "us_related_documents.related_doc_kind",
      "us_related_documents.related_doc_number",
      "us_related_documents.published_country",
      "us_related_documents.related_doc_published_date",
      "us_related_documents.related_doc_sequence",
      "us_parties",
      "us_parties.us_party_type",
      "us_parties.us_party_designation",
      "us_parties.location_id",
      "us_parties.us_party_name_first",
      "us_parties.us_party_name_last",
      "us_parties.us_party_organization",
      "us_parties.us_party_sequence",
      "us_parties.applicant_authority",
      "uspc_at_issue",
      "uspc_at_issue.uspc_mainclass",
      "uspc_at_issue.uspc_mainclass_id",
      "uspc_at_issue.uspc_subclass",
      "uspc_at_issue.uspc_subclass_id",
      "uspc_at_issue.uspc_sequence",
      "wipo",
      "wipo.wipo_field_id",
      "wipo.wipo_field",
      "wipo.wipo_sector_title",
      "wipo.wipo_sequence"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "PublicationSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "document_number",
       "publication_type",
       "publication_date",
       "publication_year",
       "publication_kind",
       "series_code",
       "rule_47_flag"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "PublicationResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "publications": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/PublicationRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "publications"
    ]
   },
   "USPCMainclassLookupRecord": {
    "type": "object",
    "properties": {
     "uspc_mainclass_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "uspc_mainclass_title": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "uspc_mainclass_first_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "uspc_mainclass_last_seen_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "x-patentref-kind": "date",
      "description": "Kind: date."
     },
     "uspc_mainclass_years_active": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "uspc_mainclass_num_patents": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "uspc_mainclass_num_assignees": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     },
     "uspc_mainclass_num_inventors": {
      "type": [
       "integer",
       "null"
      ],
      "x-patentref-kind": "number",
      "description": "Kind: number."
     }
    }
   },
   "USPCMainclassLookupFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "uspc_mainclass_id",
      "uspc_mainclass_title",
      "uspc_mainclass_first_seen_date",
      "uspc_mainclass_last_seen_date",
      "uspc_mainclass_years_active",
      "uspc_mainclass_num_patents",
      "uspc_mainclass_num_assignees",
      "uspc_mainclass_num_inventors"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "USPCMainclassLookupSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "uspc_mainclass_id",
       "uspc_mainclass_first_seen_date",
       "uspc_mainclass_last_seen_date",
       "uspc_mainclass_years_active",
       "uspc_mainclass_num_patents",
       "uspc_mainclass_num_assignees",
       "uspc_mainclass_num_inventors"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "USPCMainclassLookupResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "uspc_mainclasses": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/USPCMainclassLookupRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "uspc_mainclasses"
    ]
   },
   "USPCSubclassLookupRecord": {
    "type": "object",
    "properties": {
     "uspc_subclass_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "uspc_subclass_title": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "text",
      "description": "Kind: text."
     },
     "uspc_mainclass_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "uspc_mainclass": {
      "type": [
       "string",
       "null"
      ],
      "format": "uri",
      "description": "Link to the detail record: https://patentref.io/api/v1/uspc_mainclass/<id>/, with a \"/\" in the id written \":\"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example \"H01\" for cpc_current.cpc_class), not the URL.",
      "x-patentref-kind": "keyword"
     }
    }
   },
   "USPCSubclassLookupFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "uspc_subclass_id",
      "uspc_subclass_title",
      "uspc_mainclass_id",
      "uspc_mainclass"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "USPCSubclassLookupSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "uspc_subclass_id",
       "uspc_mainclass_id"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "USPCSubclassLookupResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "uspc_subclasses": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/USPCSubclassLookupRecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "uspc_subclasses"
    ]
   },
   "WIPORecord": {
    "type": "object",
    "properties": {
     "wipo_id": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "sector_title": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     },
     "field_title": {
      "type": [
       "string",
       "null"
      ],
      "x-patentref-kind": "keyword",
      "description": "Kind: keyword."
     }
    }
   },
   "WIPOFields": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "wipo_id",
      "sector_title",
      "field_title"
     ]
    },
    "description": "The f parameter: field names to return; a nested group's name returns every field of the group."
   },
   "WIPOSort": {
    "type": "array",
    "items": {
     "type": "object",
     "minProperties": 1,
     "maxProperties": 1,
     "additionalProperties": {
      "enum": [
       "asc",
       "desc"
      ]
     },
     "propertyNames": {
      "enum": [
       "wipo_id",
       "sector_title",
       "field_title"
      ]
     }
    },
    "description": "The s parameter: a list of {field: \"asc\" | \"desc\"} on the endpoint's sortable fields. A default sort always applies."
   },
   "WIPOResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "count": {
      "type": "integer",
      "description": "Records in this page"
     },
     "total_hits": {
      "type": "integer",
      "description": "Exact number of matching records"
     },
     "wipo": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/WIPORecord"
      }
     }
    },
    "required": [
     "error",
     "count",
     "total_hits",
     "wipo"
    ]
   },
   "CheckPatentStatus": {
    "title": "check_patent_status",
    "description": "The one-call verdict record: record facts with basis fields and an as-of date, never a legal conclusion. Served by GET /api/v1/lapse/status/{patent_id}/ (alias /api/v1/status/{patent_id}/). It has no error member.",
    "type": "object",
    "additionalProperties": false,
    "required": [
     "patent_id",
     "status",
     "basis",
     "reinstatement_possible",
     "reinstatement_basis",
     "as_of",
     "data_version",
     "permalink",
     "plain",
     "next_steps"
    ],
    "properties": {
     "patent_id": {
      "type": "string",
      "pattern": "^(RE|PP|D|H|T|AI|X)?[0-9]{1,8}$"
     },
     "status": {
      "type": "string",
      "enum": [
       "active",
       "expired_term",
       "expired_fee_nonpayment",
       "withdrawn",
       "unknown"
      ],
      "description": "Status from the record facts: the term end computed from the dates, and the maintenance-fee events. A maintenance-fee lapse whose 6-month grace period ran out after the computed term end gives expired_term, not expired_fee_nonpayment, and the basis keeps fee_lapse:<YYYY-MM-DD>. Where the USPTO 35 USC 156 list gives an earlier term end than the record's dates and the record shows no terminal disclaimer, the later of the two is the computed term end for this test; if only one of the two has passed, the status is unknown, or expired_fee_nonpayment when the fee record shows an unreinstated lapse whose grace period ran out before the later date. Where the record contradicts the filing date of a parent the term could count from and PatentRef holds no other USPTO record that gives that date, there is no computed term end: the status is the one the record's dates give on the date the row gives, when that date is a possible filing date, and on every filing date the parent's number allows (from 1978-06-01 when the number names no possible year or a serial its office never reached in that year), and unknown when those give different statuses"
     },
     "basis": {
      "type": "array",
      "items": {
       "type": "string",
       "pattern": "^(term_20y|term_17y|term_14y|term_15y|terminal_disclaimer|pta_days:[0-9]+|fee_lapse:[0-9]{4}-[0-9]{2}-[0-9]{2}|reinstated:[0-9]{4}-[0-9]{2}-[0-9]{2}|pte_156:[0-9]+)$"
      },
      "description": "Basis codes: term_20y, term_17y, term_14y, term_15y (the term rule that applied), pta_days:<N> (patent term adjustment), terminal_disclaimer, fee_lapse:<YYYY-MM-DD> (the date of the maintenance-fee record's expiry entry for non-payment), reinstated:<YYYY-MM-DD> (a later reinstatement, EXPX or PMFG in the fee record), pte_156:<N> (the patent is on the USPTO list of patent terms extended under 35 USC 156; N is the extension in days, added to the list's original expiration date)"
     },
     "reinstatement_possible": {
      "enum": [
       true,
       false,
       "unknown"
      ]
     },
     "reinstatement_basis": {
      "type": "string",
      "minLength": 1,
      "description": "The rule behind reinstatement_possible: 37 CFR 1.378 for a maintenance-fee lapse, 35 USC 154 when the term has ended (\"35 USC 154: term ended\"; \"35 USC 154: term ended (the lapse predates the term end)\" for a fee lapse whose computed term end has since passed; \"35 USC 154: term ended (the term ended before the fee lapse)\" when the grace period of the unpaid fee ran out after the computed term end)"
     },
     "expiry_date_estimated": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
      "description": "End of the statutory term, computed (35 USC 154) from dates in the USPTO record; not a date the record prints. Utility and plant patents: 20 years from the filing date (for a national stage under 35 USC 371, its international filing date, 35 USC 363), or from the earliest filing date of a parent application the record lists (continuation, division or continuation-in-part, including a parent international application the record lists as a related publication; a provisional or foreign priority date does not count), plus the patent term adjustment. A parent's filing date that the record itself contradicts is not used: an international application dated outside the year its number names (PCT/CCYYYY/; PCT/CCYY/ names its year up to 2003, and a later number written that way is read as 20YY when the row's date falls in that year; a number written without one or both slashes, such as PCTGB9300583, is read as PCT/GB93/00583) or before 1978-06-01, or whose number names no possible filing year (including a later PCT/CCYY/ number dated outside 20YY), or a US application dated outside the years in which applications of its serial number's series were filed; PatentRef also does not use a US parent date before 1950. The filing date another USPTO record PatentRef holds gives for the same application counts instead (another row of the same record, the international filing date in the record of its national stage, or the filing date in the record of the patent granted on it); when none does and that parent could be the earliest, this field is null. Filed before 1995-06-08: 17 years from grant when that ends before 1995-06-08 or after the 20-year date, else the 20-year date (basis then names term_17y or term_20y, whichever applied). Design patents: 14 years from grant, 15 when filed on or after 2015-05-13. A dated terminal disclaimer ends the term at its date. A patent or reissue on the USPTO list of patent terms extended under 35 USC 156 takes the list's original expiration date plus the extension the list gives (basis pte_156:<days>); an extension only adds to the original term (35 USC 156(a)), so where the list's date is earlier than the term computed from the record and the record shows no terminal disclaimer, the two disagree, and when only one of the two dates has passed this field is null and the status is unknown, or expired_fee_nonpayment when the fee record shows an unreinstated lapse whose grace period ran out before the later date. Not counted: a terminal disclaimer that ties the term to another patent, an extension the list does not name (an interim extension, or one granted after the list's update date), and any change to the adjustment after grant. Null for a patent withdrawn from issue, for a reissue not on the list, and when the record lacks the dates."
     },
     "lapse_date": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
     },
     "reinstated_date": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
     },
     "as_of": {
      "type": "string",
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
     },
     "data_version": {
      "type": "string",
      "pattern": "^[0-9]{8}\\.[0-9]+$"
     },
     "catalog_data_version": {
      "type": [
       "string",
       "null"
      ]
     },
     "permalink": {
      "type": "string",
      "pattern": "^https?://[^/]+/p/[A-Z0-9]+\\?v=[0-9]{8}\\.[0-9]+$"
     },
     "plain": {
      "type": "string",
      "minLength": 20,
      "description": "One sentence for a person, from the record facts above, with as_of and the data version. The USPTO record prints dates and events, not a term end, so the sentence says which is which: active and expired_term give the term end computed from the dates in the record (expiry_date_estimated, with the term rule, the parent application's filing date when the term counts from it, the patent term adjustment and a terminal disclaimer) and say whether that date has passed or not yet; expired_term adds that the USPTO list of patent terms extended under 35 USC 156 does not name the patent, or names its reissue (\"As of 2026-10-06, the term end computed from the dates in the USPTO record for US 5000000 is 2009-05-15 (20 years from filing), a date that has passed, and the USPTO list of patent terms extended under 35 USC 156, updated through 2026-09-08, does not name this patent (data version 20261006.5).\"). For a patent on that list, active and expired_term give the list's original expiration date and extension and the term end they add up to, plus the record's own term end when that is later; when only one of the two has passed, the status is unknown and the sentence gives both, unless the fee record shows an unreinstated lapse whose grace period ran out before the later date, which gives the expired_fee_nonpayment sentence. expired_fee_nonpayment gives the date of the maintenance-fee record's expiry entry and says no reinstatement follows it; withdrawn says the record shows the patent as withdrawn from issue; unknown says the record does not settle the status because no term end can be computed from its dates, or, where the record gives a parent application a filing date it contradicts and PatentRef holds no other USPTO record that gives that application's filing date, names the application, the date and why the date does not fit its number. When the date the record gives (where it is a possible filing date) and every filing date the application's number allows give the same status, the active, expired_term and expired_fee_nonpayment sentences name the application, the date and why it does not fit, and say on which of those dates the status holds."
     },
     "superseded": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "requested",
       "current",
       "note"
      ],
      "properties": {
       "requested": {
        "type": "string"
       },
       "current": {
        "type": "string"
       },
       "note": {
        "type": "string"
       },
       "snapshot_archive": {
        "type": [
         "string",
         "null"
        ]
       }
      }
     },
     "next_steps": {
      "type": "array",
      "minItems": 1,
      "items": {
       "type": "object",
       "additionalProperties": false,
       "required": [
        "kind",
        "audience"
       ],
       "properties": {
        "kind": {
         "type": "string"
        },
        "url": {
         "type": "string",
         "pattern": "^https?://"
        },
        "tool": {
         "type": "string"
        },
        "audience": {
         "type": "string",
         "enum": [
          "human",
          "agent"
         ]
        }
       },
       "anyOf": [
        {
         "required": [
          "url"
         ]
        },
        {
         "required": [
          "tool"
         ]
        }
       ]
      }
     }
    }
   },
   "SimilarResponse": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "data_version": {
      "type": "string"
     },
     "as_of": {
      "type": "string",
      "format": "date"
     },
     "method": {
      "type": "string",
      "const": "fts5_bm25_title_abstract"
     },
     "n": {
      "type": "integer"
     },
     "terms": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "The rarest input tokens that went into the query (at most 16)"
     },
     "neighbors": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "rank": {
         "type": "integer"
        },
        "patent_id": {
         "type": "string"
        },
        "patent_title": {
         "type": "string"
        },
        "patent_date": {
         "type": "string",
         "format": "date"
        },
        "score": {
         "type": "number",
         "description": "bm25 score, higher is closer"
        }
       }
      }
     }
    }
   },
   "Health": {
    "type": "object",
    "properties": {
     "ok": {
      "type": "boolean"
     },
     "version": {
      "type": "string",
      "description": "Short commit of the API server code"
     },
     "data_version": {
      "type": "string"
     },
     "db": {
      "type": "string",
      "description": "ok, or the class name of the failure"
     },
     "time": {
      "type": "string",
      "format": "date-time"
     },
     "text_data_version": {
      "type": [
       "string",
       "null"
      ],
      "description": "data_version of the long-text file in service; null when none is (the four g_*_text and g_claim endpoints then answer 501)"
     },
     "patentref_version": {
      "type": "string",
      "description": "Short commit of the PatentRef repository the server reads (the expiry engine and these documents)"
     }
    }
   },
   "Status": {
    "type": "object",
    "description": "The public status figures, cached 60 s. They carry no server paths, internal alert ids, host names, load, or disk and memory sizes: disks and memory show the free share and whether the alert threshold holds.",
    "properties": {
     "generated_at": {
      "type": "string",
      "format": "date-time"
     },
     "cache_seconds": {
      "type": "integer"
     },
     "state": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "minItems": 2,
      "maxItems": 2,
      "description": "[\"ok\"|\"degraded\"|\"down\", a sentence]"
     },
     "service": {
      "type": "object",
      "properties": {
       "name": {
        "type": "string"
       },
       "base": {
        "type": "string"
       },
       "health": {
        "type": "boolean"
       },
       "health_detail": {
        "type": "string"
       },
       "code_version": {
        "type": "string"
       },
       "data_version": {
        "type": "string"
       }
      }
     },
     "uptime": {
      "type": "object",
      "description": "From the GitHub probe (https://github.com/patentref/status) since the uptime clock of 2026-10-06 03:47 UTC; see uptime_percent, outages, last_probe"
     },
     "external_check": {
      "type": "object",
      "description": "UptimeRobot's check of /api/v1/meta/health/ from its own network, read by the box every 2 minutes: provider, configured, state (up, down, paused or pending), state_since, last_check_at, last_check_ms, interval_minutes, checks_24h, regions, last_incident, incidents (every incident the box has seen: started_at, duration_s, status, reason), read_at, fresh (false when the reading is older than 15 minutes)"
     },
     "uptime_official": {
      "type": "object",
      "description": "The uptime figure since the clock of 2026-10-06 03:47 UTC: the GitHub probe's down time until switch_at (2026-10-15 02:57:08 UTC), UptimeRobot's incidents after it: clock_start, switch_at, observer_before, observer_after, elapsed_minutes, down_minutes, down_minutes_before_switch, down_minutes_after_switch, uptime_percent, incidents_after_switch, read_at, note"
     },
     "requests_24h": {
      "type": "object",
      "description": "requests, ok, client_errors, rejected (403 and 429), server_errors, not_served, admitted, p50_ms, p95_ms, max_ms, error_rate, server_error_rate, own_requests, over the data paths under /api/v1/. not_served is the documented 501 of an endpoint whose data set is not in this release (the deferred list of /api/v1/meta/); it is not counted in server_errors or the rates. The requests the service sends to check itself are left out of every figure and counted in own_requests."
     },
     "requests_30d": {
      "type": "object",
      "description": "As requests_24h, over 30 days"
     },
     "refresh": {
      "type": "object",
      "description": "last_check (the weekly catalog poll), current and next builds with their gates"
     },
     "box": {
      "type": "object",
      "properties": {
       "disks": {
        "type": "array",
        "items": {
         "type": "object",
         "properties": {
          "name": {
           "type": "string"
          },
          "free_percent": {
           "type": [
            "number",
            "null"
           ]
          },
          "ok": {
           "type": [
            "boolean",
            "null"
           ]
          }
         }
        }
       },
       "memory": {
        "type": [
         "object",
         "null"
        ]
       },
       "backup": {
        "type": [
         "object",
         "null"
        ]
       },
       "watchdog": {
        "type": [
         "object",
         "null"
        ],
        "description": "t, and per check: ok, fails, checked, breach_since, last_alert"
       }
      }
     },
     "alerts": {
      "type": "object",
      "properties": {
       "open": {
        "type": "array",
        "items": {
         "type": "object"
        }
       },
       "recent": {
        "type": "array",
        "items": {
         "type": "object"
        }
       }
      },
      "description": "Watchdog lines of the last 7 days: time, check, state (breach or recovered)"
     }
    }
   },
   "KeyInfo": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "created": {
      "type": "boolean",
      "description": "true when this call minted the key"
     },
     "api_key": {
      "type": [
       "string",
       "null"
      ],
      "description": "The key value, only in the answer that minted it (201); null afterwards. Store it at once"
     },
     "prefix": {
      "type": "string",
      "description": "The first 8 characters of the key"
     },
     "plan": {
      "type": "string",
      "description": "\"free\""
     },
     "monthly_limit": {
      "type": [
       "integer",
       "null"
      ]
     },
     "per_minute_limit": {
      "type": "integer"
     },
     "created_at": {
      "type": "string",
      "format": "date-time"
     },
     "rotated_from": {
      "type": [
       "string",
       "null"
      ],
      "description": "The prefix of the key this one replaced"
     },
     "terms_version": {
      "type": [
       "string",
       "null"
      ],
      "description": "The version of the terms accepted when this key was minted; null for a key minted before the terms were asked"
     },
     "note": {
      "type": "string"
     }
    }
   },
   "TermsRequired": {
    "type": "object",
    "description": "The 403 ERR_TERMS body: the terms to read and the version to send back as terms_version",
    "properties": {
     "error": {
      "type": "boolean",
      "const": true
     },
     "terms_version": {
      "type": "string",
      "description": "The version of the terms in force, the value to send as terms_version"
     },
     "terms": {
      "type": "object",
      "properties": {
       "terms": {
        "type": "string",
        "format": "uri"
       },
       "privacy": {
        "type": "string",
        "format": "uri"
       },
       "acceptable_use": {
        "type": "string",
        "format": "uri"
       }
      }
     },
     "how": {
      "type": "string"
     }
    },
    "required": [
     "error",
     "terms_version",
     "terms"
    ]
   },
   "KeyList": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "email": {
      "type": "string",
      "description": "The account's email address, from the token"
     },
     "keys": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "prefix": {
         "type": "string"
        },
        "plan": {
         "type": "string"
        },
        "revoked": {
         "type": "boolean"
        },
        "created_at": {
         "type": "string",
         "format": "date-time"
        },
        "rotated_from": {
         "type": [
          "string",
          "null"
         ]
        },
        "terms_version": {
         "type": [
          "string",
          "null"
         ]
        }
       }
      }
     }
    }
   },
   "Usage": {
    "type": "object",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "plan": {
      "type": [
       "string",
       "null"
      ],
      "description": "\"free\" for a Free key; null for an operator key, which has no plan and no monthly limit"
     },
     "key_prefix": {
      "type": [
       "string",
       "null"
      ],
      "description": "The first 8 characters of the key, never the key; null for an account without an active key"
     },
     "month": {
      "type": "string",
      "description": "YYYY-MM, UTC"
     },
     "count": {
      "type": "integer",
      "description": "Requests counted this month. What counts toward the monthly allowance: a request to a data path under /api/v1/ (outside /api/v1/meta/) that carried X-Api-Key and was answered below 500 other than 403 and 429, so 200, 400 and 404 count; 403, 429 and 5xx answers (the 501 of a deferred endpoint too), the /api/v1/meta/ endpoints (usage, keys, health, status), the record pages and the files at the site root do not. Keys minted from an account count per account, so rotating a key keeps the month's count."
     },
     "monthly_limit": {
      "type": [
       "integer",
       "null"
      ],
      "description": "1000 on the Free plan; null means no monthly limit"
     },
     "remaining": {
      "type": [
       "integer",
       "null"
      ],
      "description": "monthly_limit minus count; null when there is no monthly limit"
     },
     "per_minute_limit": {
      "type": "integer",
      "description": "45 a fixed UTC clock minute"
     },
     "resets_at": {
      "type": "string",
      "format": "date-time",
      "description": "First instant of next month, UTC"
     },
     "note": {
      "type": "string",
      "description": "Present when an account has no active key yet"
     }
    }
   },
   "Meta": {
    "type": "object",
    "properties": {
     "service": {
      "type": "string"
     },
     "base": {
      "type": "string",
      "format": "uri"
     },
     "data_version": {
      "type": "string",
      "description": "One value per build: USPTO release date YYYYMMDD, a dot, the build sequence"
     },
     "build_id": {
      "type": [
       "string",
       "null"
      ],
      "description": "data_version, a plus sign and the short hash of the build inputs"
     },
     "release": {
      "type": [
       "string",
       "null"
      ],
      "description": "The release date YYYYMMDD of data_version"
     },
     "as_of": {
      "type": [
       "string",
       "null"
      ],
      "format": "date",
      "description": "Newest release date among the build inputs"
     },
     "refreshed_at": {
      "type": [
       "string",
       "null"
      ],
      "format": "date-time",
      "description": "When this build went into service"
     },
     "built_at": {
      "type": [
       "string",
       "null"
      ],
      "format": "date-time"
     },
     "snapshot_sha256": {
      "type": [
       "string",
       "null"
      ]
     },
     "index_set": {
      "type": [
       "string",
       "null"
      ],
      "description": "Version of the search indexes in the file"
     },
     "previous_version": {
      "type": [
       "string",
       "null"
      ],
      "description": "The build this one replaced; a rollback goes back to it"
     },
     "superseded_versions": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "Builds that were ready and are not the one in service, in version order. A newer build waiting for its swap is not listed; a build that served and was rolled back is. A permalink with ?v= one of these shows a superseded banner."
     },
     "delta": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "table": {
         "type": "string"
        },
        "current": {
         "type": [
          "integer",
          "null"
         ],
         "description": "Rows in the build that was in service when this one was built, the one it replaced"
        },
        "next": {
         "type": [
          "integer",
          "null"
         ],
         "description": "Rows in this build, the one in service now"
        },
        "added": {
         "type": [
          "integer",
          "null"
         ]
        },
        "removed": {
         "type": [
          "integer",
          "null"
         ]
        },
        "verdict": {
         "type": "string",
         "description": "The count rule's verdict on the PatentsView rows of the table: equal, +N.NN% (growth within the limit), GREW>limit, SHRANK, new table or missing; after a semicolon, the rows the weekly grants added (\"equal; grants +286,939\": the PatentsView rows did not change and the weekly grants added 286,939)"
        }
       }
      },
      "description": "Rows per table of the build in service against the one it replaced. The names come from the build step, which compares the build then in service (current) with the new build (next): next is this build."
     },
     "delta_note": {
      "type": "string",
      "description": "A one-line reading guide to delta"
     },
     "fee": {
      "type": [
       "object",
       "null"
      ],
      "properties": {
       "current": {
        "type": "object",
        "properties": {
         "lapsed": {
          "type": [
           "integer",
           "null"
          ]
         },
         "max_lapse_date": {
          "type": [
           "string",
           "null"
          ],
          "format": "date"
         },
         "events": {
          "type": [
           "integer",
           "null"
          ]
         },
         "file": {
          "type": [
           "string",
           "null"
          ]
         }
        }
       },
       "next": {
        "type": "object",
        "properties": {
         "lapsed": {
          "type": [
           "integer",
           "null"
          ]
         },
         "max_lapse_date": {
          "type": [
           "string",
           "null"
          ],
          "format": "date"
         },
         "events": {
          "type": [
           "integer",
           "null"
          ]
         },
         "file": {
          "type": [
           "string",
           "null"
          ]
         }
        }
       },
       "flags": {
        "type": "array",
        "items": {
         "type": "string"
        }
       }
      },
      "description": "Value-level maintenance-fee delta of the build: current is the build it replaced and next is this build, each with the lapsed patents, the newest lapse date, the fee events and the fee file it read; flags lists what the fee rule found. Null for a build without it"
     },
     "weekly_grants": {
      "type": [
       "object",
       "null"
      ],
      "properties": {
       "patentsview_through": {
        "type": "string",
        "format": "date"
       },
       "weekly_grants_through": {
        "type": "string",
        "format": "date"
       },
       "weeks": {
        "type": "integer"
       },
       "patents": {
        "type": "integer"
       },
       "source": {
        "type": "string"
       },
       "names": {
        "type": "string"
       }
      },
      "description": "The weekly grants the file carries beyond the PatentsView release; null when none"
     },
     "deferred": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "The data sets the files in service lack, read from those files: each entry starts with the data set's name and a colon, then the routes that answer 501 ERR_NOT_IMPLEMENTED without it and, for a classification lookup, where each patent carries the same facts (for example \"wipo: /api/v1/wipo/ (each patent's WIPO fields come in its wipo group)\"). Empty when the build carries every one"
     },
     "rules_version": {
      "type": [
       "string",
       "null"
      ],
      "description": "The version of the rules dataset in service (GET /api/v1/rules/); null when it cannot be read"
     },
     "attribution": {
      "type": "string"
     },
     "licenses_url": {
      "type": "string",
      "format": "uri"
     },
     "guide": {
      "type": "string",
      "format": "uri"
     },
     "openapi": {
      "type": "string",
      "format": "uri"
     },
     "generated_at": {
      "type": "string",
      "format": "date-time"
     }
    }
   },
   "RulesDate": {
    "type": "string",
    "format": "date",
    "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
   },
   "RulesRow": {
    "title": "Lapse rules dataset row",
    "description": "One rules row: office, rule_kind, act (a fixed vocabulary per rule_kind; GET /api/v1/rules/ lists it), rule_text in PatentRef's words, value (a number or an object: fee amounts with their currency, windows in months), effective_from and effective_to (1900-01-01 means the cited source states no start), superseded_by, citation_url, citation_quote (verbatim from that page, compared whitespace-insensitively), extra_quotes, written_by, verified_on, verified_by, verification_method and version (the dataset release that last changed the row).",
    "type": "object",
    "additionalProperties": false,
    "required": [
     "id",
     "office",
     "rule_kind",
     "act",
     "rule_text",
     "value",
     "effective_from",
     "effective_to",
     "superseded_by",
     "citation_url",
     "citation_quote",
     "written_by",
     "verified_on",
     "verified_by",
     "verification_method",
     "version"
    ],
    "properties": {
     "id": {
      "type": "string",
      "description": "<office>-<rule_kind>-<act>-<effective_from>",
      "pattern": "^(US|EP|CN|JP|KR|AU|PCT)-(representation|fee|window|translation|disclosure|pph|grace|identity)-[a-z0-9_]+-[0-9]{4}-[0-9]{2}-[0-9]{2}$"
     },
     "office": {
      "enum": [
       "US",
       "EP",
       "CN",
       "JP",
       "KR",
       "AU",
       "PCT"
      ]
     },
     "rule_kind": {
      "enum": [
       "representation",
       "fee",
       "window",
       "translation",
       "disclosure",
       "pph",
       "grace",
       "identity"
      ]
     },
     "act": {
      "type": "string",
      "description": "Fixed vocabulary per rule_kind; see the schema description."
     },
     "rule_text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000,
      "pattern": "^[^\\n]+$",
      "description": "Our words, one paragraph max. Generic rule only: no per-application dates, no advice."
     },
     "value": {
      "description": "Number or structured object: fee amounts with currency and entity tiers; windows in months with any surcharge or extension months.",
      "type": [
       "number",
       "object"
      ]
     },
     "effective_from": {
      "$ref": "#/components/schemas/RulesDate",
      "description": "From the source. 1900-01-01 means the start is not stated in the fetched source; a note says so."
     },
     "effective_to": {
      "oneOf": [
       {
        "$ref": "#/components/schemas/RulesDate"
       },
       {
        "type": "null"
       }
      ]
     },
     "superseded_by": {
      "oneOf": [
       {
        "type": "string",
        "pattern": "^(US|EP|CN|JP|KR|AU|PCT)-[a-z_]+-[a-z0-9_]+-[0-9]{4}-[0-9]{2}-[0-9]{2}$"
       },
       {
        "type": "null"
       }
      ]
     },
     "citation_url": {
      "type": "string",
      "format": "uri",
      "pattern": "^https://"
     },
     "citation_quote": {
      "type": "string",
      "minLength": 1,
      "maxLength": 299,
      "description": "Verbatim from citation_url, compared whitespace-insensitively (an em-dash on the page, a list bullet there, counts as a space), under 300 characters."
     },
     "extra_quotes": {
      "type": "array",
      "minItems": 1,
      "maxItems": 6,
      "items": {
       "type": "string",
       "minLength": 1,
       "maxLength": 299
      },
      "description": "More verbatim passages from the same citation_url, each under 300 characters, for a row whose fact spans more than one passage (a fee table by year). Checked like citation_quote."
     },
     "written_by": {
      "type": "string",
      "minLength": 1,
      "description": "Agent id of the writer who drafted the row"
     },
     "verified_on": {
      "$ref": "#/components/schemas/RulesDate"
     },
     "verified_by": {
      "type": "string",
      "minLength": 1,
      "description": "Agent id of the last agent that found the quote on the fetched page; the writer until an independent verifier re-checks the row"
     },
     "verification_method": {
      "enum": [
       "fetched",
       "pdf-read"
      ]
     },
     "version": {
      "type": "string",
      "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$",
      "description": "Semver of the dataset release that last changed this row."
     },
     "notes": {
      "type": "string"
     }
    },
    "allOf": [
     {
      "if": {
       "properties": {
        "rule_kind": {
         "const": "representation"
        }
       }
      },
      "then": {
       "properties": {
        "act": {
         "enum": [
          "file_application",
          "prosecute",
          "pay_maintenance_fee",
          "file_inventor_declaration",
          "filing_date_only_submission",
          "foreign_domiciled_any_act"
         ]
        }
       }
      }
     },
     {
      "if": {
       "properties": {
        "rule_kind": {
         "const": "fee"
        }
       }
      },
      "then": {
       "properties": {
        "act": {
         "enum": [
          "filing",
          "search",
          "examination",
          "issue",
          "maintenance_3_5",
          "maintenance_7_5",
          "maintenance_11_5",
          "excess_claims",
          "pct_international_filing",
          "pct_search_uspto_isa",
          "pct_search_epo_isa",
          "pct_prelim_exam",
          "designation",
          "renewal_annual",
          "acceptance"
         ]
        }
       }
      }
     },
     {
      "if": {
       "properties": {
        "rule_kind": {
         "const": "window"
        }
       }
      },
      "then": {
       "properties": {
        "act": {
         "enum": [
          "paris_priority_months",
          "pct_national_phase_months",
          "pct_national_phase_surcharge_months",
          "maintenance_grace_months",
          "pta_reconsideration_months"
         ]
        }
       }
      }
     },
     {
      "if": {
       "properties": {
        "rule_kind": {
         "const": "translation"
        }
       }
      },
      "then": {
       "properties": {
        "act": {
         "enum": [
          "filing_language",
          "translation_deadline",
          "translation_standard"
         ]
        }
       }
      }
     },
     {
      "if": {
       "properties": {
        "rule_kind": {
         "const": "disclosure"
        }
       }
      },
      "then": {
       "properties": {
        "act": {
         "enum": [
          "ai_use_statement_required",
          "inventor_natural_person_only"
         ]
        }
       }
      }
     },
     {
      "if": {
       "properties": {
        "rule_kind": {
         "const": "pph"
        }
       }
      },
      "then": {
       "properties": {
        "act": {
         "enum": [
          "route_open"
         ]
        }
       }
      }
     },
     {
      "if": {
       "properties": {
        "rule_kind": {
         "const": "grace"
        }
       }
      },
      "then": {
       "properties": {
        "act": {
         "enum": [
          "inventor_disclosure_grace_months",
          "exception_type"
         ]
        }
       }
      }
     },
     {
      "if": {
       "properties": {
        "rule_kind": {
         "const": "identity"
        }
       }
      },
      "then": {
       "properties": {
        "act": {
         "enum": [
          "efiling_identity_verification"
         ]
        }
       }
      }
     }
    ]
   },
   "RulesResponse": {
    "title": "PatentRef rules tool answer",
    "description": "The answer of every rules path: error false, tool, query (the parameters as read), rules_version, as_of (the date of that release), count and rows; note when there is something to say about the rows (none found, citations only). The changelog path answers entries instead of rows; the index answers offices, tools and vocabulary.",
    "type": "object",
    "required": [
     "error",
     "tool",
     "query",
     "rules_version",
     "as_of",
     "count"
    ],
    "properties": {
     "error": {
      "const": false
     },
     "tool": {
      "enum": [
       "rep_required",
       "fee_schedule",
       "route_windows",
       "pph_routes",
       "ai_use_statement_required",
       "grace_period",
       "rules_changelog",
       "rules_index"
      ]
     },
     "query": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
       "office": {
        "enum": [
         "US",
         "EP",
         "CN",
         "JP",
         "KR",
         "AU",
         "PCT"
        ]
       },
       "act": {
        "type": "string"
       },
       "as_of": {
        "type": "string",
        "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
       },
       "from_office": {
        "enum": [
         "US",
         "EP",
         "CN",
         "JP",
         "KR",
         "AU",
         "PCT"
        ]
       },
       "to_office": {
        "enum": [
         "US",
         "EP",
         "CN",
         "JP",
         "KR",
         "AU",
         "PCT"
        ]
       },
       "since": {
        "type": "string"
       }
      }
     },
     "rules_version": {
      "type": "string",
      "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"
     },
     "as_of": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
     },
     "count": {
      "type": "integer",
      "minimum": 0
     },
     "rows": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/RulesRow"
      }
     },
     "note": {
      "type": "string"
     },
     "to_office_pph_rows": {
      "type": "integer",
      "minimum": 0
     },
     "entries": {
      "type": "array",
      "items": {
       "type": "object",
       "required": [
        "version",
        "date",
        "lines"
       ],
       "properties": {
        "version": {
         "type": "string"
        },
        "date": {
         "type": "string"
        },
        "lines": {
         "type": "array",
         "items": {
          "type": "string"
         }
        }
       }
      }
     },
     "offices": {
      "type": "object"
     },
     "tools": {
      "type": "array"
     },
     "vocabulary": {
      "type": "object"
     }
    },
    "additionalProperties": false,
    "allOf": [
     {
      "if": {
       "properties": {
        "tool": {
         "enum": [
          "rules_changelog"
         ]
        }
       }
      },
      "then": {
       "required": [
        "entries"
       ]
      }
     },
     {
      "if": {
       "properties": {
        "tool": {
         "enum": [
          "rules_index"
         ]
        }
       }
      },
      "then": {
       "required": [
        "offices",
        "tools",
        "vocabulary"
       ]
      }
     },
     {
      "if": {
       "properties": {
        "tool": {
         "enum": [
          "rep_required",
          "fee_schedule",
          "route_windows",
          "pph_routes",
          "ai_use_statement_required",
          "grace_period"
         ]
        }
       }
      },
      "then": {
       "required": [
        "rows"
       ]
      }
     }
    ]
   },
   "ClaimTreeFlag": {
    "type": "object",
    "description": "A note on the text or the data: code (claimgraph's vocabulary, for example dependent_field_text_mismatch, multiple_dependency, dependency_on_missing_claim, claim_reference_outside_preamble, unmatched_reference, no_transition_found, empty_element, rows_reordered_by_claim_sequence, no_independent_claim), flag_id, and the details of that code (for example targets or term_ids)",
    "properties": {
     "code": {
      "type": "string"
     },
     "flag_id": {
      "type": "string"
     }
    },
    "required": [
     "code"
    ],
    "additionalProperties": true
   },
   "ClaimTreeClaim": {
    "type": "object",
    "additionalProperties": true,
    "properties": {
     "claim_id": {
      "type": "string",
      "description": "US<patent_id>-c<number>; a repeated number gets -s<sequence>"
     },
     "number": {
      "type": "integer"
     },
     "number_basis": {
      "type": "string"
     },
     "sequence": {
      "type": [
       "integer",
       "null"
      ],
      "description": "claim_sequence, from 0"
     },
     "text": {
      "type": "string",
      "description": "The claim text as published, untouched; every offset of this claim points into it"
     },
     "body_start": {
      "type": "integer",
      "description": "The offset just after the number prefix (\"1. \"), 0 if there is none"
     },
     "independent": {
      "type": "boolean"
     },
     "depends_on": {
      "type": "array",
      "items": {
       "type": "integer"
      },
      "description": "The claim numbers this claim depends on"
     },
     "depends_on_basis": {
      "type": "string",
      "description": "text, field, field_body_reference or none"
     },
     "depends_on_text": {
      "type": "array",
      "items": {
       "type": "integer"
      }
     },
     "depends_on_field": {
      "type": "array",
      "items": {
       "type": "integer"
      }
     },
     "dependent_field": {
      "type": "string",
      "description": "The dependent column of the long text, as stored"
     },
     "references": {
      "type": "array",
      "items": {
       "type": "integer"
      },
      "description": "Claims the text cites outside the preamble"
     },
     "category": {
      "type": "string",
      "description": "method, apparatus, system, composition, crm, use, design, plant or other, from the preamble's words"
     },
     "category_basis": {
      "type": "string"
     },
     "preamble": {
      "oneOf": [
       {
        "type": "null"
       },
       {
        "type": "object",
        "properties": {
         "unit_id": {
          "type": "string"
         },
         "start": {
          "type": "integer",
          "minimum": 0
         },
         "end": {
          "type": "integer",
          "minimum": 0
         },
         "text": {
          "type": "string",
          "description": "The claim text from start to end"
         }
        }
       }
      ]
     },
     "transition": {
      "oneOf": [
       {
        "type": "null"
       },
       {
        "type": "object",
        "properties": {
         "unit_id": {
          "type": "string"
         },
         "phrase": {
          "type": "string"
         },
         "start": {
          "type": "integer",
          "minimum": 0
         },
         "end": {
          "type": "integer",
          "minimum": 0
         },
         "text": {
          "type": "string",
          "description": "The claim text from start to end"
         }
        }
       }
      ]
     },
     "elements": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "element_id": {
         "type": "string"
        },
        "kind": {
         "type": "string",
         "enum": [
          "element",
          "wherein_clause"
         ]
        },
        "label": {
         "type": "string"
        },
        "opens_list": {
         "type": "boolean"
        },
        "start": {
         "type": "integer",
         "minimum": 0
        },
        "end": {
         "type": "integer",
         "minimum": 0
        },
        "text": {
         "type": "string",
         "description": "The claim text from start to end"
        }
       }
      }
     },
     "terms": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "term_id": {
         "type": "string"
        },
        "role": {
         "type": "string",
         "enum": [
          "introduces",
          "refers"
         ]
        },
        "determiner": {
         "type": "string"
        },
        "key": {
         "type": "string"
        },
        "in_unit": {
         "type": "string"
        },
        "antecedent": {
         "type": [
          "string",
          "null"
         ],
         "description": "term_id of the earlier mention a reference was matched to; null when none was found"
        },
        "match": {
         "type": "string",
         "enum": [
          "exact",
          "head",
          "trim",
          "prefix"
         ],
         "description": "How the antecedent was matched, strongest first"
        },
        "found_in": {
         "type": "string",
         "enum": [
          "same_claim",
          "dependency_chain",
          "cited_claim"
         ],
         "description": "Where the antecedent was found"
        },
        "start": {
         "type": "integer",
         "minimum": 0
        },
        "end": {
         "type": "integer",
         "minimum": 0
        },
        "text": {
         "type": "string",
         "description": "The claim text from start to end"
        }
       }
      }
     },
     "claim_refs": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "targets": {
         "type": "array",
         "items": {
          "type": "integer"
         }
        },
        "start": {
         "type": "integer",
         "minimum": 0
        },
        "end": {
         "type": "integer",
         "minimum": 0
        },
        "text": {
         "type": "string",
         "description": "The claim text from start to end"
        }
       }
      }
     },
     "flags": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/ClaimTreeFlag"
      }
     }
    }
   },
   "ClaimTree": {
    "type": "object",
    "description": "The claim tree of one granted patent, computed when it is asked for from the claims the long-text file in service prints (the rows GET /api/v1/g_claim/ answers for the same patent_id), by PatentRef's claim parser: regular expressions and small state machines, the same answer for the same text every time, no language model. Per claim: the number, the category read from the preamble, the dependency with its basis (the text, the dependent field, or both), the preamble, the transition, the elements, the term mentions with the earlier mention each \"the\" or \"said\" phrase was matched to, the claim references and the flags; per patent: the relations between those parts and the patent's own flags. Every part carries start and end, offsets into its claim's text as published: text[start:end] is the part's text (string indices in Unicode code points; a UTF-16 client converts before slicing text outside the Basic Multilingual Plane). Every offset is checked before the answer leaves the server. Flags are notes on the text and the data, for example a dependent field that names other claims than the text does; none is a conclusion about a claim. structure_version names the shape of the tree and goes up when it changes. The server keeps a bounded number of recent trees in memory; a request usually takes under 50 ms on the server. Patents granted after the long-text file's last grant date have no claim text yet and answer 404.",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "patent_id": {
      "type": "string"
     },
     "patent_unit_id": {
      "type": "string",
      "description": "US<patent_id>"
     },
     "structure_version": {
      "type": "string",
      "description": "The version of the tree's shape"
     },
     "generator": {
      "type": "string",
      "description": "The parser and its version"
     },
     "data_version": {
      "type": "string",
      "description": "The search file in service, the same as X-Data-Version"
     },
     "text_data_version": {
      "type": "string",
      "description": "The long-text file the claims came from, the same as X-Text-Data-Version"
     },
     "as_of": {
      "type": "string",
      "format": "date"
     },
     "kind": {
      "type": "string",
      "enum": [
       "utility",
       "design",
       "plant",
       "reissue"
      ]
     },
     "utility_like": {
      "type": "boolean",
      "description": "false for design and plant patents"
     },
     "claims": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/ClaimTreeClaim"
      }
     },
     "relations": {
      "type": "array",
      "description": "src, rel, dst: part_of, depends_on, references_claim, introduces_term, refers_to_term (a reference to its antecedent), has_flag",
      "items": {
       "type": "object",
       "properties": {
        "src": {
         "type": "string"
        },
        "rel": {
         "type": "string"
        },
        "dst": {
         "type": "string"
        }
       }
      }
     },
     "flags": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/ClaimTreeFlag"
      }
     }
    },
    "required": [
     "error",
     "patent_id",
     "structure_version",
     "data_version",
     "text_data_version",
     "as_of",
     "claims",
     "relations",
     "flags"
    ]
   },
   "SimilarStructuredResponse": {
    "type": "object",
    "description": "mode=structured: the patents whose claims introduce the most of the text's term keys. The keys are the noun phrases the claim tree's term finder reads in the text (lower case, the last word singular, as a claim tree's term key), weighed by how rare their rarest word is in titles and abstracts (keys in more than 2 percent of patents dropped unless fewer than 3 are left; at most 12). Candidates come from the title and abstract index: the text mode's own query and the keys as phrases, 40 each. Each candidate's claims are parsed when asked for, by the claim tree's parser (no language model, nothing stored). score is the weighed share of the text's keys found among the terms the patent's claims introduce: 1 for the same key, half for a key that ends with the other as whole words (drive motor and electric drive motor); 1 means every key found. A patent with none, without claim text, or over the claim tree's work cap is left out. Ties by the number of keys found the same, then by patent_id. shared_terms says where the claim text has each one: the claim's number and the mention's start and end in that claim's text, the offsets of GET /api/v1/structure/claims/{patent_id}/. A score describes shared wording in the published text and nothing more. Experimental: the ranking is weakest where the shared terms are common short claim words, where near-identical patents tie, and where a text yields fewer than 3 term keys, as many chemistry abstracts do.",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "data_version": {
      "type": "string"
     },
     "text_data_version": {
      "type": "string",
      "description": "The long-text file the claims came from, the same as X-Text-Data-Version"
     },
     "as_of": {
      "type": "string",
      "format": "date"
     },
     "method": {
      "type": "string",
      "const": "claim_term_keys"
     },
     "mode": {
      "type": "string",
      "const": "structured"
     },
     "structure_version": {
      "type": "string",
      "description": "The claim tree's shape version the terms come from"
     },
     "generator": {
      "type": "string",
      "description": "The claim parser and its version"
     },
     "n": {
      "type": "integer"
     },
     "terms": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "The rarest input tokens of the text mode's query, one of the two candidate queries"
     },
     "term_keys": {
      "type": "array",
      "description": "The text's term keys that were matched, rarest first, with their weights",
      "items": {
       "type": "object",
       "properties": {
        "key": {
         "type": "string"
        },
        "weight": {
         "type": "number"
        }
       }
      }
     },
     "key_phrases": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "The keys sent as phrases to the title and abstract index"
     },
     "candidates": {
      "type": "object",
      "description": "How many patents each query gave and how many of them had claim text to parse",
      "properties": {
       "title_abstract": {
        "type": "integer"
       },
       "key_phrases": {
        "type": "integer"
       },
       "with_claim_text": {
        "type": "integer"
       }
      }
     },
     "neighbors": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "rank": {
         "type": "integer"
        },
        "patent_id": {
         "type": "string"
        },
        "patent_title": {
         "type": "string"
        },
        "patent_date": {
         "type": "string",
         "format": "date"
        },
        "score": {
         "type": "number",
         "minimum": 0,
         "maximum": 1,
         "description": "The weighed share of the text's keys found in the claims"
        },
        "shared_terms": {
         "type": "array",
         "items": {
          "type": "object",
          "properties": {
           "key": {
            "type": "string",
            "description": "The text's key"
           },
           "match": {
            "type": "string",
            "enum": [
             "exact",
             "partial"
            ],
            "description": "exact: the same key; partial: one ends with the other"
           },
           "claim_key": {
            "type": "string",
            "description": "The key of the claim's term"
           },
           "claim": {
            "type": "integer",
            "description": "The number of the claim that introduces the term (the first independent one, else the first)"
           },
           "start": {
            "type": "integer",
            "minimum": 0
           },
           "end": {
            "type": "integer",
            "minimum": 0
           },
           "text": {
            "type": "string",
            "description": "The mention in that claim's text, text[start:end] of the claim"
           }
          }
         }
        }
       }
      }
     }
    },
    "required": [
     "error",
     "data_version",
     "text_data_version",
     "as_of",
     "method",
     "mode",
     "n",
     "term_keys",
     "neighbors"
    ]
   },
   "PatentBriefClaim": {
    "type": "object",
    "description": "An independent claim: its head, then its elements in order; elements holds fewer than element_count when the cut falls inside the claim",
    "properties": {
     "number": {
      "type": "integer"
     },
     "anchor": {
      "type": "string",
      "description": "Its anchor on the record page: c<n> for claim n (c<n>-s<claim_sequence> when a number repeats in the data), c<n>-e<k>-<start>-<end> for element k of claim n with its offsets in the claim text; page + \"#\" + anchor opens it there"
     },
     "category": {
      "type": "string",
      "description": "method, apparatus, system, composition, crm, use, design, plant or other, read from the preamble's words"
     },
     "preamble": {
      "description": "The words before the transition, or null",
      "oneOf": [
       {
        "type": "null"
       },
       {
        "type": "object",
        "properties": {
         "start": {
          "type": "integer",
          "minimum": 0
         },
         "end": {
          "type": "integer",
          "minimum": 0
         },
         "text": {
          "type": "string",
          "description": "The claim text from start to end, as published"
         }
        },
        "required": [
         "start",
         "end",
         "text"
        ]
       }
      ]
     },
     "transition": {
      "description": "The transition (comprising, consisting of, wherein and the like), or null",
      "oneOf": [
       {
        "type": "null"
       },
       {
        "type": "object",
        "properties": {
         "start": {
          "type": "integer",
          "minimum": 0
         },
         "end": {
          "type": "integer",
          "minimum": 0
         },
         "text": {
          "type": "string",
          "description": "The claim text from start to end, as published"
         }
        },
        "required": [
         "start",
         "end",
         "text"
        ]
       }
      ]
     },
     "element_count": {
      "type": "integer",
      "minimum": 0,
      "description": "How many elements the claim has"
     },
     "elements": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "anchor": {
         "type": "string",
         "description": "Its anchor on the record page: c<n> for claim n (c<n>-s<claim_sequence> when a number repeats in the data), c<n>-e<k>-<start>-<end> for element k of claim n with its offsets in the claim text; page + \"#\" + anchor opens it there"
        },
        "kind": {
         "type": "string",
         "enum": [
          "wherein_clause"
         ],
         "description": "Present only for a wherein clause"
        },
        "start": {
         "type": "integer",
         "minimum": 0
        },
        "end": {
         "type": "integer",
         "minimum": 0
        },
        "text": {
         "type": "string",
         "description": "The claim text from start to end, as published"
        }
       },
       "required": [
        "anchor",
        "start",
        "end",
        "text"
       ]
      }
     }
    },
    "required": [
     "number",
     "anchor",
     "category",
     "preamble",
     "transition",
     "element_count",
     "elements"
    ]
   },
   "PatentBriefLine": {
    "type": "object",
    "description": "A dependent claim on one line",
    "properties": {
     "number": {
      "type": "integer"
     },
     "anchor": {
      "type": "string",
      "description": "Its anchor on the record page: c<n> for claim n (c<n>-s<claim_sequence> when a number repeats in the data), c<n>-e<k>-<start>-<end> for element k of claim n with its offsets in the claim text; page + \"#\" + anchor opens it there"
     },
     "depends_on": {
      "type": "array",
      "items": {
       "type": "integer"
      },
      "description": "The claim numbers it depends on"
     },
     "cut": {
      "type": "boolean",
      "const": true,
      "description": "Present when the line stops before the claim's end: after at most 240 characters, at a space"
     },
     "start": {
      "type": "integer",
      "minimum": 0
     },
     "end": {
      "type": "integer",
      "minimum": 0
     },
     "text": {
      "type": "string",
      "description": "The claim text from start to end, as published"
     }
    },
    "required": [
     "number",
     "anchor",
     "depends_on",
     "start",
     "end",
     "text"
    ]
   },
   "PatentBrief": {
    "type": "object",
    "description": "A brief of one granted patent that fits a token budget, built when it is asked for from the patent's record in the search file, its status record and its claim tree (the claims the long-text file in service prints, read by the claim tree's parser: no language model, nothing stored). It holds, in this order: identity (patent_id, patent_title, patent_type, patent_date for the grant, filing_date, claim_count and independent_count); status (the record GET /api/v1/lapse/status/{patent_id}/ answers, without its links; null when no status catalog is in service); independent_claims (each independent claim with its category, preamble, transition and elements); dependent_claims (one line for each dependent claim: its number, the claims it depends on, and its text from its transition, or from its body when it has none, to its end, cut at a space after at most 240 characters); component_keys (the term keys of the terms the claims introduce, each with the numbers of the claims that introduce it, independent claims first). The items are taken in that order, each independent claim's head before its elements, and the first item that does not fit ends the brief, so the brief for a smaller budget is the start of the brief for a larger one; truncated says whether the budget left anything out and omitted counts what it left out. tokens is the size of the whole answer by the stated proxy that tokenizer names: the UTF-8 bytes of the JSON body as sent, divided by 3 and rounded up, never over max_tokens. A model's own tokenizer counts differently; leave room by asking for less. Every quote (a preamble, a transition, an element, a dependent line) carries start and end, offsets into its claim's text as published (text[start:end] is the quote, in Unicode code points, the offsets GET /api/v1/structure/claims/{patent_id}/ serves), and every one is checked before the answer leaves the server. Every claim and element carries anchor, its place on the record page: page + \"#\" + anchor opens it there. The patent's own words (its title, the quoted claim text, the term keys) come as printed; nothing in the answer is a conclusion about a claim.",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "patent_id": {
      "type": "string"
     },
     "structure_version": {
      "type": "string",
      "description": "The claim tree's shape version the brief is read from"
     },
     "generator": {
      "type": "string",
      "description": "The claim parser and its version"
     },
     "data_version": {
      "type": "string",
      "description": "The search file in service, the same as X-Data-Version"
     },
     "text_data_version": {
      "type": "string",
      "description": "The long-text file the claims came from, the same as X-Text-Data-Version"
     },
     "as_of": {
      "type": "string",
      "format": "date"
     },
     "max_tokens": {
      "type": "integer",
      "minimum": 300,
      "maximum": 32000,
      "description": "The budget asked for"
     },
     "tokens": {
      "type": "integer",
      "minimum": 1,
      "description": "This answer's own size by the stated proxy; never over max_tokens"
     },
     "tokenizer": {
      "type": "string",
      "const": "ceil(utf8_bytes / 3)",
      "description": "The stated proxy: the UTF-8 bytes of the JSON body as sent, divided by 3, rounded up"
     },
     "truncated": {
      "type": "boolean",
      "description": "true when the budget left anything out"
     },
     "omitted": {
      "type": "object",
      "description": "How many of each the budget left out",
      "properties": {
       "independent_claims": {
        "type": "integer",
        "minimum": 0
       },
       "elements": {
        "type": "integer",
        "minimum": 0
       },
       "dependent_claims": {
        "type": "integer",
        "minimum": 0
       },
       "component_keys": {
        "type": "integer",
        "minimum": 0
       }
      },
      "required": [
       "independent_claims",
       "elements",
       "dependent_claims",
       "component_keys"
      ]
     },
     "page": {
      "type": "string",
      "description": "The record page of this data version; page + \"#\" + an anchor opens that claim or element"
     },
     "identity": {
      "description": "The patent's record: its PatentsView fields and the claim counts",
      "oneOf": [
       {
        "type": "null"
       },
       {
        "type": "object",
        "properties": {
         "patent_id": {
          "type": "string"
         },
         "patent_title": {
          "type": [
           "string",
           "null"
          ]
         },
         "patent_type": {
          "type": [
           "string",
           "null"
          ]
         },
         "patent_date": {
          "type": [
           "string",
           "null"
          ],
          "format": "date",
          "description": "The grant date"
         },
         "filing_date": {
          "type": [
           "string",
           "null"
          ],
          "format": "date"
         },
         "claim_count": {
          "type": "integer",
          "minimum": 0
         },
         "independent_count": {
          "type": "integer",
          "minimum": 0
         }
        },
        "required": [
         "patent_id",
         "patent_title",
         "patent_type",
         "patent_date",
         "filing_date",
         "claim_count",
         "independent_count"
        ]
       }
      ]
     },
     "status": {
      "description": "The status record GET /api/v1/lapse/status/{patent_id}/ answers, without its links; null when no status catalog is in service",
      "oneOf": [
       {
        "type": "null"
       },
       {
        "type": "object",
        "properties": {
         "status": {
          "type": "string",
          "enum": [
           "active",
           "expired_term",
           "expired_fee_nonpayment",
           "withdrawn",
           "unknown"
          ],
          "description": "Status from the record facts: the term end computed from the dates, and the maintenance-fee events. A maintenance-fee lapse whose 6-month grace period ran out after the computed term end gives expired_term, not expired_fee_nonpayment, and the basis keeps fee_lapse:<YYYY-MM-DD>. Where the USPTO 35 USC 156 list gives an earlier term end than the record's dates and the record shows no terminal disclaimer, the later of the two is the computed term end for this test; if only one of the two has passed, the status is unknown, or expired_fee_nonpayment when the fee record shows an unreinstated lapse whose grace period ran out before the later date. Where the record contradicts the filing date of a parent the term could count from and PatentRef holds no other USPTO record that gives that date, there is no computed term end: the status is the one the record's dates give on the date the row gives, when that date is a possible filing date, and on every filing date the parent's number allows (from 1978-06-01 when the number names no possible year or a serial its office never reached in that year), and unknown when those give different statuses"
         },
         "basis": {
          "type": "array",
          "items": {
           "type": "string",
           "pattern": "^(term_20y|term_17y|term_14y|term_15y|terminal_disclaimer|pta_days:[0-9]+|fee_lapse:[0-9]{4}-[0-9]{2}-[0-9]{2}|reinstated:[0-9]{4}-[0-9]{2}-[0-9]{2}|pte_156:[0-9]+)$"
          },
          "description": "Basis codes: term_20y, term_17y, term_14y, term_15y (the term rule that applied), pta_days:<N> (patent term adjustment), terminal_disclaimer, fee_lapse:<YYYY-MM-DD> (the date of the maintenance-fee record's expiry entry for non-payment), reinstated:<YYYY-MM-DD> (a later reinstatement, EXPX or PMFG in the fee record), pte_156:<N> (the patent is on the USPTO list of patent terms extended under 35 USC 156; N is the extension in days, added to the list's original expiration date)"
         },
         "expiry_date_estimated": {
          "type": [
           "string",
           "null"
          ],
          "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
          "description": "End of the statutory term, computed (35 USC 154) from dates in the USPTO record; not a date the record prints. Utility and plant patents: 20 years from the filing date (for a national stage under 35 USC 371, its international filing date, 35 USC 363), or from the earliest filing date of a parent application the record lists (continuation, division or continuation-in-part, including a parent international application the record lists as a related publication; a provisional or foreign priority date does not count), plus the patent term adjustment. A parent's filing date that the record itself contradicts is not used: an international application dated outside the year its number names (PCT/CCYYYY/; PCT/CCYY/ names its year up to 2003, and a later number written that way is read as 20YY when the row's date falls in that year; a number written without one or both slashes, such as PCTGB9300583, is read as PCT/GB93/00583) or before 1978-06-01, or whose number names no possible filing year (including a later PCT/CCYY/ number dated outside 20YY), or a US application dated outside the years in which applications of its serial number's series were filed; PatentRef also does not use a US parent date before 1950. The filing date another USPTO record PatentRef holds gives for the same application counts instead (another row of the same record, the international filing date in the record of its national stage, or the filing date in the record of the patent granted on it); when none does and that parent could be the earliest, this field is null. Filed before 1995-06-08: 17 years from grant when that ends before 1995-06-08 or after the 20-year date, else the 20-year date (basis then names term_17y or term_20y, whichever applied). Design patents: 14 years from grant, 15 when filed on or after 2015-05-13. A dated terminal disclaimer ends the term at its date. A patent or reissue on the USPTO list of patent terms extended under 35 USC 156 takes the list's original expiration date plus the extension the list gives (basis pte_156:<days>); an extension only adds to the original term (35 USC 156(a)), so where the list's date is earlier than the term computed from the record and the record shows no terminal disclaimer, the two disagree, and when only one of the two dates has passed this field is null and the status is unknown, or expired_fee_nonpayment when the fee record shows an unreinstated lapse whose grace period ran out before the later date. Not counted: a terminal disclaimer that ties the term to another patent, an extension the list does not name (an interim extension, or one granted after the list's update date), and any change to the adjustment after grant. Null for a patent withdrawn from issue, for a reissue not on the list, and when the record lacks the dates."
         },
         "lapse_date": {
          "type": [
           "string",
           "null"
          ],
          "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
         },
         "reinstated_date": {
          "type": [
           "string",
           "null"
          ],
          "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
         },
         "reinstatement_possible": {
          "enum": [
           true,
           false,
           "unknown"
          ]
         },
         "reinstatement_basis": {
          "type": "string",
          "minLength": 1,
          "description": "The rule behind reinstatement_possible: 37 CFR 1.378 for a maintenance-fee lapse, 35 USC 154 when the term has ended (\"35 USC 154: term ended\"; \"35 USC 154: term ended (the lapse predates the term end)\" for a fee lapse whose computed term end has since passed; \"35 USC 154: term ended (the term ended before the fee lapse)\" when the grace period of the unpaid fee ran out after the computed term end)"
         },
         "plain": {
          "type": "string",
          "minLength": 20,
          "description": "One sentence for a person, from the record facts above, with as_of and the data version. The USPTO record prints dates and events, not a term end, so the sentence says which is which: active and expired_term give the term end computed from the dates in the record (expiry_date_estimated, with the term rule, the parent application's filing date when the term counts from it, the patent term adjustment and a terminal disclaimer) and say whether that date has passed or not yet; expired_term adds that the USPTO list of patent terms extended under 35 USC 156 does not name the patent, or names its reissue (\"As of 2026-10-06, the term end computed from the dates in the USPTO record for US 5000000 is 2009-05-15 (20 years from filing), a date that has passed, and the USPTO list of patent terms extended under 35 USC 156, updated through 2026-09-08, does not name this patent (data version 20261006.5).\"). For a patent on that list, active and expired_term give the list's original expiration date and extension and the term end they add up to, plus the record's own term end when that is later; when only one of the two has passed, the status is unknown and the sentence gives both, unless the fee record shows an unreinstated lapse whose grace period ran out before the later date, which gives the expired_fee_nonpayment sentence. expired_fee_nonpayment gives the date of the maintenance-fee record's expiry entry and says no reinstatement follows it; withdrawn says the record shows the patent as withdrawn from issue; unknown says the record does not settle the status because no term end can be computed from its dates, or, where the record gives a parent application a filing date it contradicts and PatentRef holds no other USPTO record that gives that application's filing date, names the application, the date and why the date does not fit its number. When the date the record gives (where it is a possible filing date) and every filing date the application's number allows give the same status, the active, expired_term and expired_fee_nonpayment sentences name the application, the date and why it does not fit, and say on which of those dates the status holds."
         },
         "as_of": {
          "type": "string",
          "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
         }
        },
        "required": [
         "status",
         "basis",
         "expiry_date_estimated",
         "lapse_date",
         "reinstated_date",
         "reinstatement_possible",
         "reinstatement_basis",
         "plain",
         "as_of"
        ]
       }
      ]
     },
     "independent_claims": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/PatentBriefClaim"
      }
     },
     "dependent_claims": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/PatentBriefLine"
      }
     },
     "component_keys": {
      "type": "array",
      "description": "The term keys of the terms the claims introduce, each with the claims that introduce it, ordered by the first claim that introduces it, independent claims first",
      "items": {
       "type": "object",
       "properties": {
        "key": {
         "type": "string",
         "description": "A claim tree's term key: the patent's words, lower case, the last word singular"
        },
        "claims": {
         "type": "array",
         "items": {
          "type": "integer"
         },
         "description": "The claims that introduce it"
        }
       },
       "required": [
        "key",
        "claims"
       ]
      }
     }
    },
    "required": [
     "error",
     "patent_id",
     "structure_version",
     "generator",
     "data_version",
     "text_data_version",
     "as_of",
     "max_tokens",
     "tokens",
     "tokenizer",
     "truncated",
     "omitted",
     "page",
     "identity",
     "status",
     "independent_claims",
     "dependent_claims",
     "component_keys"
    ]
   },
   "ClaimCountsPatent": {
    "type": "object",
    "description": "The patent's counts, in this order (the columns of the claim counts snapshot after patent_id)",
    "properties": {
     "claims": {
      "type": "integer",
      "minimum": 0,
      "description": "Claims of the patent in the long-text file, a claim whose whole text is a cancellation note left out. It is independent_claims plus dependent_claims. USPTO Patent Claims Research Dataset: pat_clm_ct plus pat_dep_clm_ct (document_stats).",
      "x-patentref-uspto": "pat_clm_ct plus pat_dep_clm_ct (document_stats)"
     },
     "independent_claims": {
      "type": "integer",
      "minimum": 0,
      "description": "Claims with no dependency in the claim tree: no claim named in the preamble, and none in the dependent field of the long text either. A claim that names another claim only in its body (\"a system that performs the method of claim 1\") counts here. USPTO Patent Claims Research Dataset: pat_clm_ct, which counts a claim as independent only when its text names no other claim anywhere; that count is claims minus claims_citing_other_claims.",
      "x-patentref-uspto": "pat_clm_ct, which counts a claim as independent only when its text names no other claim anywhere; that count is claims minus claims_citing_other_claims"
     },
     "dependent_claims": {
      "type": "integer",
      "minimum": 0,
      "description": "Claims with a dependency in the claim tree: parent_claims of 1 or more. USPTO Patent Claims Research Dataset: pat_dep_clm_ct (see claims_citing_other_claims).",
      "x-patentref-uspto": "pat_dep_clm_ct (see claims_citing_other_claims)"
     },
     "claims_citing_other_claims": {
      "type": "integer",
      "minimum": 0,
      "description": "Claims whose text names at least one other claim, in the preamble or in the body. This is the rule the USPTO dataset uses to call a claim dependent. USPTO Patent Claims Research Dataset: pat_dep_clm_ct.",
      "x-patentref-uspto": "pat_dep_clm_ct"
     },
     "multiple_dependent_claims": {
      "type": "integer",
      "minimum": 0,
      "description": "Claims that depend on more than one claim. No USPTO counterpart."
     },
     "cancelled_claims": {
      "type": "integer",
      "minimum": 0,
      "description": "Claims whose whole text is a cancellation note, such as \"(canceled)\"; they are left out of every other count. USPTO Patent Claims Research Dataset: none for grants; the USPTO dataset leaves cancelled claims out of its counts.",
      "x-patentref-uspto": "none for grants; the USPTO dataset leaves cancelled claims out of its counts"
     },
     "words": {
      "type": "integer",
      "minimum": 0,
      "description": "Words of the claims, each claim counted after its number prefix. A word is a run of characters between white space with at least one letter or digit: a comma or bracket set off by spaces is not a word. USPTO Patent Claims Research Dataset: the sum of word_ct over the claims (claims_stats); for grants from 2002 on the USPTO files also count the claim's number (\"1.\") as a word when their claim text starts with it.",
      "x-patentref-uspto": "the sum of word_ct over the claims (claims_stats); for grants from 2002 on the USPTO files also count the claim's number (\"1.\") as a word when their claim text starts with it"
     },
     "words_first_claim": {
      "type": [
       "integer",
       "null"
      ],
      "description": "Words of the first claim in claim order; null when the patent has no claim. USPTO Patent Claims Research Dataset: word_ct of the first claim (claims_stats).",
      "x-patentref-uspto": "word_ct of the first claim (claims_stats)"
     },
     "words_independent_total": {
      "type": "integer",
      "minimum": 0,
      "description": "Words of the independent claims together. USPTO Patent Claims Research Dataset: pat_wrd_ct.",
      "x-patentref-uspto": "pat_wrd_ct"
     },
     "words_independent_min": {
      "type": [
       "integer",
       "null"
      ],
      "description": "Words of the shortest independent claim; null without an independent claim. USPTO Patent Claims Research Dataset: pat_wrd_min (the length of the shortest independent claim).",
      "x-patentref-uspto": "pat_wrd_min (the length of the shortest independent claim)"
     },
     "words_independent_mean": {
      "type": [
       "number",
       "null"
      ],
      "description": "Mean words per independent claim, to two decimals; null without an independent claim. USPTO Patent Claims Research Dataset: pat_wrd_avg.",
      "x-patentref-uspto": "pat_wrd_avg"
     },
     "words_independent_max": {
      "type": [
       "integer",
       "null"
      ],
      "description": "Words of the longest independent claim; null without an independent claim. No USPTO counterpart."
     },
     "words_dependent_total": {
      "type": "integer",
      "minimum": 0,
      "description": "Words of the dependent claims together, each counted on its own text: the words of the claims it refers to are not added. USPTO Patent Claims Research Dataset: pat_dep_wrd_ct, which also counts a dependent claim's own words only.",
      "x-patentref-uspto": "pat_dep_wrd_ct, which also counts a dependent claim's own words only"
     },
     "words_dependent_min": {
      "type": [
       "integer",
       "null"
      ],
      "description": "Words of the shortest dependent claim; null without a dependent claim. USPTO Patent Claims Research Dataset: pat_dep_wrd_min.",
      "x-patentref-uspto": "pat_dep_wrd_min"
     },
     "words_dependent_mean": {
      "type": [
       "number",
       "null"
      ],
      "description": "Mean words per dependent claim, to two decimals; null without a dependent claim. USPTO Patent Claims Research Dataset: pat_dep_wrd_avg.",
      "x-patentref-uspto": "pat_dep_wrd_avg"
     },
     "characters": {
      "type": "integer",
      "minimum": 0,
      "description": "Characters of the claims, each claim counted after its number prefix with its spacing made regular: each run of white space counts as one space, and no space counts before a comma, semicolon, colon, full stop or closing bracket or after an opening bracket. USPTO Patent Claims Research Dataset: the sum of char_ct over the claims (claims_stats; the USPTO codebook does not define char_ct further, and for grants from 2002 on it also counts the claim's number and its full stop when the claim text starts with them).",
      "x-patentref-uspto": "the sum of char_ct over the claims (claims_stats; the USPTO codebook does not define char_ct further, and for grants from 2002 on it also counts the claim's number and its full stop when the claim text starts with them)"
     },
     "elements_independent_min": {
      "type": [
       "integer",
       "null"
      ],
      "description": "Elements of the independent claim with the fewest. An element is a part of the body after the transition word, split at semicolons and colons as the claim tree splits it; wherein clauses are not elements. Null without an independent claim. No USPTO counterpart."
     },
     "elements_independent_mean": {
      "type": [
       "number",
       "null"
      ],
      "description": "Mean elements per independent claim, to two decimals; null without an independent claim. No USPTO counterpart."
     },
     "elements_independent_max": {
      "type": [
       "integer",
       "null"
      ],
      "description": "Elements of the independent claim with the most; null without an independent claim. No USPTO counterpart."
     },
     "dependency_depth_max": {
      "type": "integer",
      "minimum": 0,
      "description": "The longest chain of dependencies: 0 when every claim is independent, 1 when every dependent claim depends directly on an independent claim, 2 when one depends on a claim at depth 1, and so on. No USPTO counterpart."
     },
     "consisting_words": {
      "type": "integer",
      "minimum": 0,
      "description": "Times the word \"consisting\" appears in the claims. USPTO Patent Claims Research Dataset: the sum of cns_ct over the claims.",
      "x-patentref-uspto": "the sum of cns_ct over the claims"
     },
     "or_words": {
      "type": "integer",
      "minimum": 0,
      "description": "Times the word \"or\" appears in the claims. USPTO Patent Claims Research Dataset: the sum of or_ct over the claims.",
      "x-patentref-uspto": "the sum of or_ct over the claims"
     },
     "selected_from_phrases": {
      "type": "integer",
      "minimum": 0,
      "description": "Times the words \"selected from\" appear together in the claims. USPTO Patent Claims Research Dataset: the sum of sf_ct over the claims.",
      "x-patentref-uspto": "the sum of sf_ct over the claims"
     }
    },
    "required": [
     "claims",
     "independent_claims",
     "dependent_claims",
     "claims_citing_other_claims",
     "multiple_dependent_claims",
     "cancelled_claims",
     "words",
     "words_first_claim",
     "words_independent_total",
     "words_independent_min",
     "words_independent_mean",
     "words_independent_max",
     "words_dependent_total",
     "words_dependent_min",
     "words_dependent_mean",
     "characters",
     "elements_independent_min",
     "elements_independent_mean",
     "elements_independent_max",
     "dependency_depth_max",
     "consisting_words",
     "or_words",
     "selected_from_phrases"
    ]
   },
   "ClaimCountsClaim": {
    "type": "object",
    "description": "One claim's counts, in claim order",
    "properties": {
     "number": {
      "type": "integer",
      "minimum": 0,
      "description": "The claim's number, as the claim tree gives it. USPTO Patent Claims Research Dataset: claim_no.",
      "x-patentref-uspto": "claim_no"
     },
     "sequence": {
      "type": "integer",
      "minimum": 0,
      "description": "The claim's place in the long text, from 0. No USPTO counterpart."
     },
     "words": {
      "type": "integer",
      "minimum": 0,
      "description": "Words of the claim after its number prefix (see the patent's words). USPTO Patent Claims Research Dataset: word_ct.",
      "x-patentref-uspto": "word_ct"
     },
     "characters": {
      "type": "integer",
      "minimum": 0,
      "description": "Characters of the claim after its number prefix, its spacing made regular (see the patent's characters). USPTO Patent Claims Research Dataset: char_ct.",
      "x-patentref-uspto": "char_ct"
     },
     "elements": {
      "type": "integer",
      "minimum": 0,
      "description": "Elements of the claim (see elements_independent_min). No USPTO counterpart."
     },
     "wherein_clauses": {
      "type": "integer",
      "minimum": 0,
      "description": "Wherein clauses of the claim, the parts of the body the claim tree reads as one. No USPTO counterpart."
     },
     "parent_claims": {
      "type": "integer",
      "minimum": 0,
      "description": "Claims this claim depends on in the claim tree; 0 for an independent claim. No USPTO counterpart."
     },
     "cited_claims": {
      "type": "integer",
      "minimum": 0,
      "description": "Other claims the claim's text names, in the preamble or the body. USPTO Patent Claims Research Dataset: the claims in dependencies (claims_fulltext); ind_flg is 1 when there are none.",
      "x-patentref-uspto": "the claims in dependencies (claims_fulltext); ind_flg is 1 when there are none"
     },
     "dependency_depth": {
      "type": "integer",
      "minimum": 0,
      "description": "The claim's place in the longest chain of dependencies above it: 0 for an independent claim, 1 for a claim that depends on one, and so on. No USPTO counterpart."
     },
     "consisting_words": {
      "type": "integer",
      "minimum": 0,
      "description": "Times the word \"consisting\" appears in the claim. USPTO Patent Claims Research Dataset: cns_ct.",
      "x-patentref-uspto": "cns_ct"
     },
     "or_words": {
      "type": "integer",
      "minimum": 0,
      "description": "Times the word \"or\" appears in the claim. USPTO Patent Claims Research Dataset: or_ct.",
      "x-patentref-uspto": "or_ct"
     },
     "selected_from_phrases": {
      "type": "integer",
      "minimum": 0,
      "description": "Times the words \"selected from\" appear together in the claim. USPTO Patent Claims Research Dataset: sf_ct.",
      "x-patentref-uspto": "sf_ct"
     },
     "cancelled": {
      "type": "integer",
      "minimum": 0,
      "description": "1 when the claim's whole text is a cancellation note, else 0; a cancelled claim is in no patent count but cancelled_claims. No USPTO counterpart."
     }
    },
    "required": [
     "number",
     "sequence",
     "words",
     "characters",
     "elements",
     "wherein_clauses",
     "parent_claims",
     "cited_claims",
     "dependency_depth",
     "consisting_words",
     "or_words",
     "selected_from_phrases",
     "cancelled"
    ]
   },
   "ClaimCounts": {
    "type": "object",
    "description": "The claim counts of one granted patent, in the spirit of the USPTO Patent Claims Research Dataset (the USPTO Office of the Chief Economist's claims data for grants of 1976 to 2014), for every grant the long-text file in service holds. They are counted when they are asked for, from the claim tree GET /api/v1/structure/claims/{patent_id}/ builds from the same claims, with no language model and nothing stored: per patent the claims, the independent and dependent claims, the claims whose text names another claim (the USPTO dataset's rule for a dependent claim), words in all, of the first claim, and the least, mean and most of the independent and of the dependent claims, characters, the elements of the independent claims, the longest chain of dependencies, and the USPTO dataset's counts of the words \"consisting\" and \"or\" and of \"selected from\"; per claim the same counts for that claim. Every field is a count, or the least, mean or most of counts, and each field's description names the USPTO variable it follows. Words and characters are counted after the claim's number prefix; a word is a run of characters between white space with at least one letter or digit. Checked against the USPTO files on 1,000 random grants of 1976 to 2014: the claims of a patent agreed for 99.8 percent of patents, and the words of a claim came within 2 words or 2 percent for 93 percent of claims (97.7 percent for grants from 2002); https://patentref.io/docs/claim-counts.html gives every field and the comparison. counts_version names the fields and their rules and goes up when either changes. Patents granted after the long-text file's last grant date have no claim text yet and answer 404.",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "patent_id": {
      "type": "string"
     },
     "patent_unit_id": {
      "type": "string",
      "description": "US<patent_id>"
     },
     "counts_version": {
      "type": "string",
      "description": "The version of the fields and their rules"
     },
     "structure_version": {
      "type": "string",
      "description": "The version of the claim tree's shape the counts are read from"
     },
     "generator": {
      "type": "string",
      "description": "The claim parser and its version"
     },
     "data_version": {
      "type": "string",
      "description": "The search file in service, the same as X-Data-Version"
     },
     "text_data_version": {
      "type": "string",
      "description": "The long-text file the claims came from, the same as X-Text-Data-Version"
     },
     "as_of": {
      "type": "string",
      "format": "date"
     },
     "counts": {
      "$ref": "#/components/schemas/ClaimCountsPatent"
     },
     "claim_counts": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/ClaimCountsClaim"
      }
     }
    },
    "required": [
     "error",
     "patent_id",
     "counts_version",
     "structure_version",
     "data_version",
     "text_data_version",
     "as_of",
     "counts",
     "claim_counts"
    ]
   },
   "TriageMention": {
    "type": "object",
    "description": "The first mention of a component: in the first independent claim that mentions it, else the first claim",
    "properties": {
     "term_id": {
      "type": "string",
      "description": "The mention's term_id in the claim tree"
     },
     "claim": {
      "type": "integer",
      "description": "The claim's number"
     },
     "claim_id": {
      "type": "string",
      "description": "The claim's id in the claim tree, US<patent_id>-c<number>"
     },
     "start": {
      "type": "integer",
      "minimum": 0
     },
     "end": {
      "type": "integer",
      "minimum": 0
     },
     "text": {
      "type": "string",
      "description": "The claim's text from start to end"
     }
    },
    "required": [
     "claim",
     "claim_id",
     "term_id",
     "start",
     "end",
     "text"
    ]
   },
   "TriagePart": {
    "type": "object",
    "description": "One part of an independent claim, in the order of the claim's text",
    "properties": {
     "part": {
      "type": "string",
      "enum": [
       "preamble",
       "transition",
       "element",
       "wherein_clause"
      ]
     },
     "part_id": {
      "type": "string",
      "description": "The part's id in the claim tree (unit_id or element_id)"
     },
     "label": {
      "type": "string",
      "description": "The element's own label in the text, as a. or (b)"
     },
     "opens_list": {
      "type": "boolean",
      "description": "true for an element that opens a list, as configured to:"
     },
     "claim": {
      "type": "integer",
      "description": "The claim's number"
     },
     "claim_id": {
      "type": "string",
      "description": "The claim's id in the claim tree, US<patent_id>-c<number>"
     },
     "start": {
      "type": "integer",
      "minimum": 0
     },
     "end": {
      "type": "integer",
      "minimum": 0
     },
     "text": {
      "type": "string",
      "description": "The claim's text from start to end"
     }
    },
    "required": [
     "part",
     "claim",
     "claim_id",
     "part_id",
     "start",
     "end",
     "text"
    ]
   },
   "TriageClaimParts": {
    "type": "object",
    "description": "One independent claim as its parts",
    "properties": {
     "claim": {
      "type": "integer"
     },
     "claim_id": {
      "type": "string"
     },
     "category": {
      "type": "string",
      "description": "The claim tree's category of the claim, read from the preamble's words"
     },
     "parts": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/TriagePart"
      }
     }
    },
    "required": [
     "claim",
     "claim_id",
     "category",
     "parts"
    ]
   },
   "TriageCell": {
    "type": "object",
    "description": "One component in one patent's claims",
    "properties": {
     "key": {
      "type": "string",
      "description": "The component's key"
     },
     "position": {
      "type": "string",
      "enum": [
       "every_independent",
       "some_independent",
       "only_dependent",
       "absent"
      ]
     },
     "match": {
      "oneOf": [
       {
        "type": "null"
       },
       {
        "type": "string",
        "enum": [
         "exact",
         "partial"
        ]
       }
      ],
      "description": "exact: a claim term has the same key; partial: one key ends with the other as whole words; null when absent"
     },
     "claim_keys": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "The claim terms' keys it matched, exact first (at most 3)"
     },
     "independent_claims": {
      "type": "array",
      "items": {
       "type": "integer"
      },
      "description": "The independent claims that mention it"
     },
     "dependent_claims": {
      "type": "array",
      "items": {
       "type": "integer"
      },
      "description": "The dependent claims that mention it"
     },
     "quote": {
      "oneOf": [
       {
        "type": "null"
       },
       {
        "$ref": "#/components/schemas/TriageMention"
       }
      ]
     }
    },
    "required": [
     "key",
     "position",
     "match",
     "claim_keys",
     "independent_claims",
     "dependent_claims",
     "quote"
    ]
   },
   "TriageStatus": {
    "type": "object",
    "description": "The values GET /api/v1/lapse/status/{patent_id}/ gives for the patent",
    "properties": {
     "status": {
      "type": "string",
      "enum": [
       "active",
       "expired_term",
       "expired_fee_nonpayment",
       "withdrawn",
       "unknown"
      ],
      "description": "Status from the record facts: the term end computed from the dates, and the maintenance-fee events. A maintenance-fee lapse whose 6-month grace period ran out after the computed term end gives expired_term, not expired_fee_nonpayment, and the basis keeps fee_lapse:<YYYY-MM-DD>. Where the USPTO 35 USC 156 list gives an earlier term end than the record's dates and the record shows no terminal disclaimer, the later of the two is the computed term end for this test; if only one of the two has passed, the status is unknown, or expired_fee_nonpayment when the fee record shows an unreinstated lapse whose grace period ran out before the later date. Where the record contradicts the filing date of a parent the term could count from and PatentRef holds no other USPTO record that gives that date, there is no computed term end: the status is the one the record's dates give on the date the row gives, when that date is a possible filing date, and on every filing date the parent's number allows (from 1978-06-01 when the number names no possible year or a serial its office never reached in that year), and unknown when those give different statuses"
     },
     "basis": {
      "type": "array",
      "items": {
       "type": "string",
       "pattern": "^(term_20y|term_17y|term_14y|term_15y|terminal_disclaimer|pta_days:[0-9]+|fee_lapse:[0-9]{4}-[0-9]{2}-[0-9]{2}|reinstated:[0-9]{4}-[0-9]{2}-[0-9]{2}|pte_156:[0-9]+)$"
      },
      "description": "Basis codes: term_20y, term_17y, term_14y, term_15y (the term rule that applied), pta_days:<N> (patent term adjustment), terminal_disclaimer, fee_lapse:<YYYY-MM-DD> (the date of the maintenance-fee record's expiry entry for non-payment), reinstated:<YYYY-MM-DD> (a later reinstatement, EXPX or PMFG in the fee record), pte_156:<N> (the patent is on the USPTO list of patent terms extended under 35 USC 156; N is the extension in days, added to the list's original expiration date)"
     },
     "reinstatement_possible": {
      "enum": [
       true,
       false,
       "unknown"
      ]
     },
     "reinstatement_basis": {
      "type": "string",
      "minLength": 1,
      "description": "The rule behind reinstatement_possible: 37 CFR 1.378 for a maintenance-fee lapse, 35 USC 154 when the term has ended (\"35 USC 154: term ended\"; \"35 USC 154: term ended (the lapse predates the term end)\" for a fee lapse whose computed term end has since passed; \"35 USC 154: term ended (the term ended before the fee lapse)\" when the grace period of the unpaid fee ran out after the computed term end)"
     },
     "expiry_date_estimated": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
      "description": "End of the statutory term, computed (35 USC 154) from dates in the USPTO record; not a date the record prints. Utility and plant patents: 20 years from the filing date (for a national stage under 35 USC 371, its international filing date, 35 USC 363), or from the earliest filing date of a parent application the record lists (continuation, division or continuation-in-part, including a parent international application the record lists as a related publication; a provisional or foreign priority date does not count), plus the patent term adjustment. A parent's filing date that the record itself contradicts is not used: an international application dated outside the year its number names (PCT/CCYYYY/; PCT/CCYY/ names its year up to 2003, and a later number written that way is read as 20YY when the row's date falls in that year; a number written without one or both slashes, such as PCTGB9300583, is read as PCT/GB93/00583) or before 1978-06-01, or whose number names no possible filing year (including a later PCT/CCYY/ number dated outside 20YY), or a US application dated outside the years in which applications of its serial number's series were filed; PatentRef also does not use a US parent date before 1950. The filing date another USPTO record PatentRef holds gives for the same application counts instead (another row of the same record, the international filing date in the record of its national stage, or the filing date in the record of the patent granted on it); when none does and that parent could be the earliest, this field is null. Filed before 1995-06-08: 17 years from grant when that ends before 1995-06-08 or after the 20-year date, else the 20-year date (basis then names term_17y or term_20y, whichever applied). Design patents: 14 years from grant, 15 when filed on or after 2015-05-13. A dated terminal disclaimer ends the term at its date. A patent or reissue on the USPTO list of patent terms extended under 35 USC 156 takes the list's original expiration date plus the extension the list gives (basis pte_156:<days>); an extension only adds to the original term (35 USC 156(a)), so where the list's date is earlier than the term computed from the record and the record shows no terminal disclaimer, the two disagree, and when only one of the two dates has passed this field is null and the status is unknown, or expired_fee_nonpayment when the fee record shows an unreinstated lapse whose grace period ran out before the later date. Not counted: a terminal disclaimer that ties the term to another patent, an extension the list does not name (an interim extension, or one granted after the list's update date), and any change to the adjustment after grant. Null for a patent withdrawn from issue, for a reissue not on the list, and when the record lacks the dates."
     },
     "lapse_date": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
     },
     "reinstated_date": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
     },
     "as_of": {
      "type": "string",
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
     }
    },
    "required": [
     "status",
     "basis",
     "reinstatement_possible",
     "reinstatement_basis",
     "expiry_date_estimated",
     "lapse_date",
     "reinstated_date",
     "as_of"
    ]
   },
   "TriageRow": {
    "type": "object",
    "description": "One patent of the table",
    "properties": {
     "row": {
      "type": "integer",
      "minimum": 1,
      "description": "Its place in the list or the search"
     },
     "patent_id": {
      "type": "string"
     },
     "title": {
      "type": [
       "string",
       "null"
      ]
     },
     "patent_date": {
      "type": [
       "string",
       "null"
      ],
      "format": "date"
     },
     "permalink": {
      "type": "string",
      "description": "The patent's record page, https://patentref.io/p/<patent_id>?v=<data_version>"
     },
     "found": {
      "type": "boolean",
      "description": "false when the data in service has no patent with this number"
     },
     "built": {
      "type": "boolean",
      "description": "true when its claims were read; cells, components and claim_parts are empty otherwise"
     },
     "note": {
      "oneOf": [
       {
        "type": "null"
       },
       {
        "type": "string",
        "enum": [
         "not_in_data",
         "no_claim_text",
         "work_cap",
         "offset_check",
         "time_limit"
        ]
       }
      ],
      "description": "Why a row has no cells: not_in_data, no_claim_text (granted after the long-text file's last grant date), work_cap (over 1,000 claim rows or 1,000,000 characters), offset_check (a span that did not hold), time_limit (the table stopped before this row; send it again)"
     },
     "status": {
      "oneOf": [
       {
        "type": "null"
       },
       {
        "$ref": "#/components/schemas/TriageStatus"
       }
      ]
     },
     "claims": {
      "oneOf": [
       {
        "type": "null"
       },
       {
        "type": "object",
        "properties": {
         "total": {
          "type": "integer"
         },
         "independent": {
          "type": "array",
          "items": {
           "type": "integer"
          }
         }
        }
       }
      ]
     },
     "cells": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/TriageCell"
      },
      "description": "One per component of the table, in its order"
     },
     "components": {
      "oneOf": [
       {
        "type": "null"
       },
       {
        "type": "object",
        "properties": {
         "every_independent": {
          "type": "array",
          "items": {
           "type": "string"
          }
         },
         "some_independent": {
          "type": "array",
          "items": {
           "type": "string"
          }
         },
         "only_dependent": {
          "type": "array",
          "items": {
           "type": "string"
          }
         }
        }
       }
      ],
      "description": "The keys of the terms the patent's own claims introduce, by position"
     },
     "claim_parts": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/TriageClaimParts"
      }
     }
    },
    "required": [
     "row",
     "patent_id",
     "title",
     "patent_date",
     "permalink",
     "found",
     "built",
     "note",
     "status",
     "claims",
     "cells",
     "components",
     "claim_parts"
    ]
   },
   "TriageTable": {
    "type": "object",
    "description": "The triage table: up to 500 granted patents in one answer, each with its expiry and maintenance-fee status, where each component sits in its claims, and each independent claim as a list of its parts. The patents are a list (patents: up to 500 numbers, as a list or as pasted text with or without US, thousands separators and kind codes) or a search of the claims (search: words that must all be in one claim, a \"quoted phrase\" kept as a phrase; limit: 1 to 500, default 100), read from the full-text index of the claims in the reverse of the order the long-text file loaded them, so recent grants tend to come first. Per patent, status, basis, reinstatement_possible and the dates are the values GET /api/v1/lapse/status/{patent_id}/ gives. The components (components: up to 12) are read as claim tree term keys (lower case, the last word singular); without them the table picks up to 6: the keys the most of its patents introduce, in at least two of them, weighed by how rare their rarest word is in titles and abstracts. For each component a cell gives its position: every_independent (each independent claim mentions it), some_independent (some do), only_dependent (no independent claim does and a dependent claim does) or absent (no claim does). A claim mentions a component when one of its term mentions has the component's key, or refers back to a mention that has it; match is exact (the same key) or partial (one key ends with the other as whole words, drive motor and electric drive motor). claim_parts give each independent claim as its preamble, transition, elements and wherein clauses. Every quote carries claim, claim_id, start and end: text is the claim's text from start to end (string indices in Unicode code points), checked on the server before the answer leaves. Built when asked for by the claim tree's deterministic parser (no language model, nothing stored, no corpus-wide index), with a bounded cache per server process. One table at a time per key, and a few at once on the server: beyond that the answer is 429 with Retry-After and X-Status-Reason. A table stops building after 20 s: the rows it did not reach say note time_limit and complete is false. output=csv gives the export: one row per patent, per component and per claim part, with the quote and its location; the mark column is for the reader's own have and lacks notes, which the page at https://patentref.io/triage/ keeps in the browser and never sends. One request toward the monthly allowance, whatever the number of patents. The table describes the text of the claims and nothing more.",
    "properties": {
     "error": {
      "type": "boolean",
      "const": false
     },
     "data_version": {
      "type": "string",
      "description": "The search file in service, the same as X-Data-Version"
     },
     "text_data_version": {
      "type": "string",
      "description": "The long-text file the claims came from, the same as X-Text-Data-Version"
     },
     "as_of": {
      "type": "string",
      "format": "date"
     },
     "structure_version": {
      "type": "string",
      "description": "The claim tree's shape version the parts come from"
     },
     "generator": {
      "type": "string",
      "description": "The claim parser and its version"
     },
     "input": {
      "type": "object",
      "additionalProperties": true,
      "description": "How the request was read. A list: kind list, patents_read, repeated (numbers given twice), unread (up to 20 pieces that are not patent numbers) and unread_count. A search: kind search, search, terms, limit, found, more (more patents match than the limit) and complete (false when the search stopped at its time limit). Both: unread_components."
     },
     "components": {
      "type": "array",
      "description": "The table's components, in column order",
      "items": {
       "type": "object",
       "properties": {
        "key": {
         "type": "string"
        },
        "from": {
         "type": "string",
         "enum": [
          "request",
          "table"
         ]
        },
        "asked": {
         "type": [
          "string",
          "null"
         ],
         "description": "The words the request gave for it; null when the table picked it"
        },
        "patents": {
         "type": "integer",
         "description": "The patents of the table whose claims mention it"
        }
       }
      }
     },
     "positions": {
      "type": "array",
      "items": {
       "type": "string",
       "enum": [
        "every_independent",
        "some_independent",
        "only_dependent",
        "absent"
       ]
      }
     },
     "complete": {
      "type": "boolean",
      "description": "false when the table reached its time limit before every row"
     },
     "time_limit_seconds": {
      "type": "number"
     },
     "status_available": {
      "type": "boolean",
      "description": "false when the status engine could not be read; every status is then null"
     },
     "counts": {
      "type": "object",
      "properties": {
       "patents": {
        "type": "integer"
       },
       "found": {
        "type": "integer"
       },
       "built": {
        "type": "integer"
       },
       "not_built": {
        "type": "integer"
       }
      }
     },
     "quotes": {
      "type": "integer",
      "description": "The quotes in the answer, each checked against the claim text"
     },
     "export_columns": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "The columns of the CSV export, in order"
     },
     "patents": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/TriageRow"
      }
     }
    },
    "required": [
     "error",
     "data_version",
     "text_data_version",
     "as_of",
     "structure_version",
     "generator",
     "input",
     "components",
     "positions",
     "complete",
     "time_limit_seconds",
     "status_available",
     "counts",
     "quotes",
     "export_columns",
     "patents"
    ]
   },
   "TriageRequest": {
    "type": "object",
    "additionalProperties": false,
    "description": "patents or search, one of the two",
    "properties": {
     "patents": {
      "oneOf": [
       {
        "type": "string"
       },
       {
        "type": "array",
        "maxItems": 500,
        "items": {
         "type": "string"
        }
       }
      ],
      "description": "Up to 500 patent numbers: a list, or text with the numbers separated by spaces, commas, semicolons or new lines"
     },
     "search": {
      "type": "string",
      "maxLength": 500,
      "description": "Words that must all be in one claim (at most 12 words and quoted phrases)"
     },
     "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 500,
      "default": 100,
      "description": "With search: the patents to take"
     },
     "components": {
      "oneOf": [
       {
        "type": "string"
       },
       {
        "type": "array",
        "maxItems": 12,
        "items": {
         "type": "string"
        }
       }
      ],
      "description": "Up to 12 components, a list or text separated by commas"
     },
     "output": {
      "type": "string",
      "enum": [
       "json",
       "csv"
      ],
      "default": "json"
     }
    }
   }
  }
 },
 "tags": [
  {
   "name": "assignees"
  },
  {
   "name": "attorneys"
  },
  {
   "name": "cpc_classes"
  },
  {
   "name": "cpc_groups"
  },
  {
   "name": "cpc_subclasses"
  },
  {
   "name": "foreign_citations"
  },
  {
   "name": "g_brf_sum_texts"
  },
  {
   "name": "g_claims"
  },
  {
   "name": "g_detail_desc_texts"
  },
  {
   "name": "g_draw_desc_texts"
  },
  {
   "name": "inventors"
  },
  {
   "name": "ipcr"
  },
  {
   "name": "locations"
  },
  {
   "name": "nber_categories"
  },
  {
   "name": "nber_subcategories"
  },
  {
   "name": "other_references"
  },
  {
   "name": "patents"
  },
  {
   "name": "pg_brf_sum_texts"
  },
  {
   "name": "pg_claims"
  },
  {
   "name": "pg_detail_desc_texts"
  },
  {
   "name": "pg_draw_desc_texts"
  },
  {
   "name": "publications"
  },
  {
   "name": "rel_app_texts"
  },
  {
   "name": "us_application_citations"
  },
  {
   "name": "us_patent_citations"
  },
  {
   "name": "uspc_mainclasses"
  },
  {
   "name": "uspc_subclasses"
  },
  {
   "name": "wipo"
  },
  {
   "name": "meta",
   "description": "PatentRef additions: build facts, health, status, keys, usage"
  },
  {
   "name": "lapse",
   "description": "PatentRef additions: expiry and maintenance-fee status, nearest patents, the record page"
  },
  {
   "name": "rules",
   "description": "PatentRef additions: office rules, fees and windows with their citations"
  },
  {
   "name": "structure",
   "description": "PatentRef additions: claim trees, briefs, claim counts and the triage table, every part located in the claim text"
  }
 ]
}
