BYTETOOLS

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.

No API key requiredCORS enabledHTTPSFree tier

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
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'
JavaScript (fetch)
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);
Python (requests)
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())
Response — HTTP 200
{
  "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

ParameterTypeRequiredDescription
qstringRequiredLucene query. Field-qualified terms work: `collection:feature_films`, `mediatype:movies`, `year:[1930 TO 1959]`. collection:feature_films
fl[]string (repeatable)OptionalWhich fields to return. Repeat the parameter once per field. Without it you get a large default document. identifier
rowsintegerOptionalResults per page. Keep it small; large pages are slow for both sides. 3
pageintegerOptionalPage number, 1-based. Deep paging is refused — use the scrape API for bulk harvests. 2
sort[]stringOptionalSort expression, e.g. `downloads desc` or `publicdate asc`. downloads desc
outputstringRequiredSet 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

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.