Internet Archive Search API
Search the Internet Archive's 28,000+ public domain feature films and millions of other items with a free, key-free Solr-backed API. Choose your own fields. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Internet Archive Search API?
The Internet Archive's advanced search endpoint is a free, key-free API over the Archive's full catalogue, including more than 28,000 public domain feature films. It is a Solr query interface: you supply a Lucene-style query, list exactly the fields you want back, and receive JSON.
Nearly every 'free movie API' is metadata about films you cannot legally show. This one is the opposite: it indexes items the Internet Archive actually hosts, a large share of them public domain, and each result's `identifier` resolves to a real playable file at a predictable URL. For anyone building a classic film site, a video kiosk or a teaching demo that needs genuinely usable content, that changes what is possible.
It is a Solr front end, and treating it as one is the difference between a fast integration and a frustrating one. `q` takes Lucene syntax, so `collection:feature_films AND year:[1930 TO 1959]` works as written. `fl[]` is repeated once per field you want and is not optional in spirit — omit it and you get a fat default document for every row. Paging is `rows` plus `page`, and the response tells you `numFound` so you know the size of what you are walking. The one hard limit to plan around is depth: very large offsets are refused, so for a full harvest use the Archive's scrape API rather than paging this endpoint to the end.
Quick facts
- Base URL
https://archive.org- Authentication
- No key or account for search. Uploading and modifying items needs credentials; reading does not.
- Rate limit
- No published per-key limit, but queries are expensive and the Archive is a charity. Cache results and keep `rows` modest.
- Pricing
- Free. The Internet Archive is a non-profit — consider donating if you build on it.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Internet Archive Search API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Find three public domain feature films
GET https://archive.org/advancedsearch.php?q=collection%3Afeature_films&fl%5B%5D=identifier&fl%5B%5D=title&fl%5B%5D=year&rows=3&output=json
curl 'https://archive.org/advancedsearch.php?q=collection%3Afeature_films&fl%5B%5D=identifier&fl%5B%5D=title&fl%5B%5D=year&rows=3&output=json'const res = await fetch("https://archive.org/advancedsearch.php?q=collection%3Afeature_films&fl%5B%5D=identifier&fl%5B%5D=title&fl%5B%5D=year&rows=3&output=json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://archive.org/advancedsearch.php?q=collection%3Afeature_films&fl%5B%5D=identifier&fl%5B%5D=title&fl%5B%5D=year&rows=3&output=json", timeout=20)
res.raise_for_status()
print(res.json()){
"responseHeader": {
"status": 0,
"QTime": 17,
"params": {
"query": "collection:feature_films",
"qin": "collection:feature_films",
"fields": "identifier,title,year",
"wt": "json",
"rows": 3,
"start": 0
}
},
"response": {
"numFound": 28469,
"start": 0,
"docs": [
{
"identifier": "mokhtar-saeghii-32766867",
"title": "Mokhtar Saeghii 32766867"
},
{
"identifier": "woman-to-woman_1929",
"title": "Woman to Woman",
"year": 1929
},
{
"identifier": "wee-willie-winkie-1937",
"title": "Wee Willie Winkie"
}
]
}
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | Required | Lucene query. Field-qualified terms work: `collection:feature_films`, `mediatype:movies`, `year:[1930 TO 1959]`. collection:feature_films |
fl[] | string (repeatable) | Optional | Which fields to return. Repeat the parameter once per field. Without it you get a large default document. identifier |
rows | integer | Optional | Results per page. Keep it small; large pages are slow for both sides. 3 |
page | integer | Optional | Page number, 1-based. Deep paging is refused — use the scrape API for bulk harvests. 2 |
sort[] | string | Optional | Sort expression, e.g. `downloads desc` or `publicdate asc`. downloads desc |
output | string | Required | Set to `json`. The default is an HTML page. json |
Response fields
responseHeader.paramsobject- The query as the server parsed it — invaluable when a filter is silently not doing what you expected.
response.numFoundinteger- Total matching items, not just this page. Use it to size pagination.
response.startinteger- Offset of the first returned row.
response.docs[]array- One object per item, containing exactly the fields you asked for in `fl[]` and nothing else.
docs[].identifierstring- The Archive item id. Files live at `https://archive.org/download/{identifier}/` and the details page at `/details/{identifier}`.
docs[].title / year / creatorstring- Standard metadata fields, returned only when requested. Fields absent from an item are simply omitted from that document.
What you can build with the Internet Archive Search API
- Build a public domain film browser with genuinely playable results
- Find archival footage by year, collection or creator for a project
- Populate a media library or digital signage loop with legal content
- Practise Lucene query syntax against a huge, free, real index
- Cross-reference an item you already have by identifier
Common errors and how to fix them
HTML instead of JSON
The `output=json` parameter is missing.
Fix: Without it the endpoint renders its own search results page. Always send `output=json`.
Enormous responses
You did not restrict fields.
Fix: Send `fl[]` once per field you actually need. The default document per item is very large across thousands of rows.
Deep paging fails
Solr refuses very large offsets.
Fix: Do not page to the end of a big result set. For a full harvest use the Archive's scrape endpoint, which is designed for it.
Slow or timing-out queries
Broad unqualified queries scan an enormous index.
Fix: Qualify with `collection:` or `mediatype:` and keep `rows` small. Cache aggressively — the catalogue changes slowly.
Internet Archive Search API — frequently asked questions
Is the Internet Archive API free and does it need a key?
Searching is free and needs no key or account. Only writing to the Archive requires credentials. It is run by a non-profit, so cache your results and keep query volume reasonable.
How do I find public domain movies?
Query `collection:feature_films` for the curated feature film collection, or `mediatype:movies` for everything moving-image. Add `year:[1930 TO 1959]` style ranges to narrow further, and always request `identifier` so you can resolve each hit to a real file.
How do I turn an identifier into a playable file?
Item files are listed at `https://archive.org/metadata/{identifier}` and served from `https://archive.org/download/{identifier}/{filename}`. The human-readable page is `https://archive.org/details/{identifier}`.
Why do some fields come back missing?
The Archive's metadata is contributor-supplied and uneven. A field you asked for is simply absent from documents that do not have it, so guard for undefined rather than assuming every row has the same shape.
Tools that pair with this API
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
JSON Path Finder
Evaluate a dot/bracket path against your JSON and list every leaf path for discovery. Free online JSON path finder that runs 100% in your browser.
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Internet Archive Search is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.