Fresh Off Patent API
The weekly lists as JSON: every batch, every scored patent with its write-up, demand and sourcing checks, and the grace-period list. The data matches the website and updates when each USPTO batch is published.
Create an account Full reference
Swipe sideways to see the whole figure.
Quick start
Create a key
Sign in and open Account, API. Name the key and copy it: it is shown once. An account can hold up to 10 keys, and any key can be revoked from the same page.
Authenticate
Send the key with every request, as a bearer token or in the X-API-Key header.
curl https://api.freshoffpatent.com/v1/me \ -H "Authorization: Bearer fop_live_…"Find the latest batch
GET /v1/weeks lists the weekly batches, newest first, with the number of lapsed patents and of listed patents in each track. It is free.
curl "https://api.freshoffpatent.com/v1/weeks?limit=2" \ -H "Authorization: Bearer fop_live_…"[ { "week": "2026-10-05", "issue": 5, "lapsed": 3852, "full_term": 397, "picks": { "mobility": 12, "consumer": 197, "software": 5, "electronics": 12, "food": 14, "energy": 10, "industrial": 12, "health": 10 } }, { "week": "2026-09-28", "issue": 4, "lapsed": 3843, "full_term": 0, "picks": { "consumer": 73 } } ]Retrieve the patents
GET /v1/weeks/{week}/picks returns the batch's patents in rank order, with the write-up, score, demand check and sourcing check for each. Each patent returned costs one credit.
curl "https://api.freshoffpatent.com/v1/weeks/2026-10-05/picks?track=consumer&limit=1" \ -H "Authorization: Bearer fop_live_…"{ "total": 197, "items": [ { "patent": "8820368", "url": "https://freshoffpatent.com/p/8820368", "title": "WALLET COMPOSED OF STEEL FABRIC", "headline": "Bi-fold wallet made from stainless-steel woven fabric", "summary": "A wallet constructed from woven stainless-steel mesh that is stitched into layers to…", "claim_plain": "The independent claim covered a wallet assembled from a back layer and multiple front…", "whats_new": "Using a fine stainless-steel woven mesh as both the structural material for wallet…", "track": "consumer", "category": "accessories", "category_name": "Bags, Jewelry & Accessories", "lapse_kind": "fee", "lapse_date": "2026-09-02", "week": "2026-10-05", "rank": 1, "owner": "STWART-STAND, PAUL", "filed": "2012-01-16", "granted": "2014-09-02", "cpc": [ "A45C1/06", "A45C13/00" ], "score": { "total": 77, "demand": 60, "makeable": 80, "novelty": 82, "track_record": 80, "clear": 100 }, "making": { "process": "Cut woven stainless-steel mesh panels, stitch front layers to a back panel around…", "materials": [ "stainless-steel woven mesh (Inox 316L suggested)", "stainless-steel thread or polyester/cotton stitching (possible)" ], "rating": 4, "note": "Requires cutting and sewing (or industrial stitching) of metal mesh and handling of…" }, "demand": { "sold": "yes", "price_low": 65.0, "price_high": 66.0, "signals": "Multiple retailers offer RFID-blocking wallets with woven stainless steel or steel mesh…", "examples": [ { "name": "Stainless Steel RFID Blocking Wallet", "seller": "Adafruit Industries", "price": "$66.00", "url": "https://www.adafruit.com/product/999" }, { "name": "Stainless Steel Wallet (Stewart/STAND) – RFID blocking wallet", "seller": "STEWART/STAND", "price": "starting at about $65", "url": "https://www.stewartstand.com/pages/identity-theft-rfid-technology" } ] }, "sourcing": { "found": "yes", "unit_low": 1.6, "unit_high": 1.8, "moq_typical": 1.0, "suppliers": [ { "name": "Alibaba Wholesale RFID Anti-Theft Smart Wallet", "site": "Alibaba.com", "unit_price": "$1.60 - $1.80 per unit", "moq": "10-199 pieces", "url": "https://www.alibaba.com/product-introduction/Wholesale-RFID-Anti-Theft-Smart-Wallet_16009…" }, { "name": "Sview Electronics Co., Ltd.", "site": "Made-in-China.com", "unit_price": "not listed", "moq": "1 piece", "url": "https://id.made-in-china.com/co_cnfulicom/product_Stainless-Steel-and-Aluminum-Alloy-Slim…" } ] }, "related_in_force": [], "drawings": [ "https://freshoffpatent.com/drawings/8820368-1r.png", "https://freshoffpatent.com/drawings/8820368-2.png" ], "links": { "google_patents": "https://patents.google.com/patent/US8820368", "uspto": "https://patentcenter.uspto.gov/applications/13350986" } } ] }Long text is shortened here. The API returns it in full.
Endpoints
| Request | Returns | Cost |
|---|---|---|
| GET /v1/me | Plan and credit balance | Free |
| GET /v1/tracks | Track keys and descriptions | Free |
| GET /v1/weeks | Weekly batches, newest first | Free |
| GET /v1/weeks/{week}/picks | A batch's patents in rank order. Filter by track, category and min_score; page with limit and offset. | 1 credit per patent |
| GET /v1/patents/{number} | One patent by US number | 1 credit |
| GET /v1/search?q= | Archive search, best match first | 1 credit per result, minimum 1 |
| GET /v1/lapsing-soon | Grace-period list, earliest deadline first. Studio plan. | 1 credit per 10 rows |
Field definitions for every response are in the full reference.
Credits
Each plan includes credits every calendar month. Monthly credits reset on the 1st and do not carry over. Purchased credits never expire and are spent after the monthly allowance.
| Plan | Credits per month |
|---|---|
| Free | 100 |
| Pro | 2,000 |
| Studio | 10,000 |
| Credit pack | 5,000 for |
| Credit pack | 25,000 for |
Every response carries X-Credits-Charged and X-Credits-Remaining headers. A request the balance cannot cover returns 402 and is not charged.
Errors and limits
Each account may make 60 requests per minute. Errors return JSON with a machine-readable code and a message.
{
"error": "insufficient_credits",
"message": "This request costs 25 credits and you have 12. Buy more on your account page or wait for next month's allowance."
}
| Status | Code | Meaning |
|---|---|---|
| 401 | missing_key, invalid_key | No key sent, or the key is unknown or revoked |
| 402 | insufficient_credits | The balance does not cover the request; nothing is charged |
| 403 | plan_required | The endpoint needs a higher plan |
| 404 | not_found | No such batch or patent |
| 429 | rate_limited | More than 60 requests in a minute |
Examples
Python
import httpx
API = "https://api.freshoffpatent.com"
HEADERS = {"Authorization": "Bearer fop_live_…"}
week = httpx.get(f"{API}/v1/weeks", headers=HEADERS, params={"limit": 1}).json()[0]["week"]
page = httpx.get(f"{API}/v1/weeks/{week}/picks", headers=HEADERS,
params={"track": "consumer", "min_score": 70, "limit": 100}).json()
for p in page["items"]:
print(p["score"]["total"], p["patent"], p["headline"])
JavaScript
const API = "https://api.freshoffpatent.com";
const headers = { Authorization: "Bearer fop_live_…" };
const [latest] = await (await fetch(`${API}/v1/weeks?limit=1`, { headers })).json();
const page = await (await fetch(`${API}/v1/weeks/${latest.week}/picks?min_score=70&limit=100`, { headers })).json();
page.items.forEach(p => console.log(p.score.total, p.patent, p.headline));
Use of the API is governed by the Terms. Each listing is a research lead, not legal advice.