PatentRef

Data version 20261027.2, as of 2026-10-27: the build these pages were checked against. API version 1.21.0.

Lapse fields

PatentRef's additions to the grammar: the expiry and maintenance-fee facts of each patent, from the USPTO record, with their basis and an as-of date. Nothing here is a legal conclusion.

The lapse group

Name lapse or lapse.<field> in f on /api/v1/patent/ or /api/v1/patent/{patent_id}/. It is never in the default fields, and q or s on it answers 400 ERR_Q.

curl -s -G -H "X-Api-Key: $KEY" https://patentref.io/api/v1/patent/ \
  --data-urlencode 'q={"_text_phrase": {"patent_title": "solid state battery"}}' \
  --data-urlencode 'f=["patent_id", "patent_title", "lapse.expiry_status", "lapse.expiry_date_estimated", "lapse.lapse_date"]'
FieldTypeMeaning
lapse.expiry_statusstring: active, expired_term, expired_fee_nonpayment, withdrawn, unknownStatus 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.
lapse.expiry_date_estimatedstringEnd 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.
lapse.expiry_basisarrayBasis 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.
lapse.reinstatement_possible: True, False, unknown37 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.
lapse.fee_statusstring"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.
lapse.lapse_datestringDate 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.
lapse.reinstated_datestringDate 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.
lapse.priornumberLapse 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.
lapse.prior_pctnumberPercentile 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.
lapse.fwd_earlyintegerDirect 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.
lapse.fwd_lateintegerDirect 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.
lapse.sleeper_flagbooleanExpired, 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.
lapse.as_ofstringAs-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.
lapse.data_versionstringdata_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.

Routes and rules

Nearest patents by claim terms (experimental)

Add mode=structured to /api/v1/lapse/similar to rank patents by the claim terms they share with your text instead of by title and abstract words. It answers 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.

This mode is 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.

curl -s -G -H "X-Api-Key: $KEY" --data-urlencode "text=A pool cleaner with a drive motor and a filter bag" -d n=5 -d mode=structured https://patentref.io/api/v1/lapse/similar
FieldNote
text_data_versionThe long-text file the claims came from, the same as X-Text-Data-Version
structure_versionThe claim tree's shape version the terms come from
generatorThe claim parser and its version
termsThe rarest input tokens of the text mode's query, one of the two candidate queries
term_keysThe text's term keys that were matched, rarest first, with their weights
key_phrasesThe keys sent as phrases to the title and abstract index
candidatesHow many patents each query gave and how many of them had claim text to parse
neighbors[].scoreThe weighed share of the text's keys found in the claims
shared_terms[].keyThe text's key
shared_terms[].matchexact: the same key; partial: one ends with the other
shared_terms[].claim_keyThe key of the claim's term
shared_terms[].claimThe number of the claim that introduces the term (the first independent one, else the first)
shared_terms[].textThe mention in that claim's text, text[start:end] of the claim

Without mode, or with mode=text, the answer is the title and abstract one above, unchanged. To read a shared term in its claim, ask for the claim tree, Claim trees, and slice that claim's text with start and end.