API Documentation

Access decades of preserved web history programmatically. The 1990 Web Archive API provides read-only access to archived pages, crawl status tracking, and historical web analytics.

💡 Quick Start

Install our official SDK or make direct HTTP requests. All endpoints return JSON and require authentication via API key.

bash
npm install @1990archive/sdk
# or via curl
curl -H 'X-Archive-Key: YOUR_API_KEY' https://api.1990webarchive.com/v1/pages/search

Base URL & Versioning

All requests target the following base URL. API versioning is enforced via URL path prefix.

text
https://api.1990webarchive.com/v1

Breaking changes are prevented by version pinning. The latest stable version is v1. Deprecated endpoints return a Deprecation header with sunset dates.

Authentication

Authenticate requests by including your API key in the X-Archive-Key header. Keys are generated in your dashboard and have scoped permissions.

http
GET /v1/pages/search HTTP/1.1
Host: api.1990webarchive.com
X-Archive-Key: sk_live_8f7d6e5c4b3a2910
Content-Type: application/json
⚠️ Security Note

Never expose API keys in client-side code. Use environment variables or server-side proxies for frontend applications.

Rate Limits

Requests are limited to 120 req/min for standard tiers and 1000 req/min for enterprise. Rate limit headers are included in every response.

http
RateLimit-Limit: 120
RateLimit-Remaining: 98
RateLimit-Reset: 1698765432

GET /pages/search

Search the archive for pages matching specific criteria. Supports era filtering, technology detection, and full-text indexing.

ParameterTypeRequiredDescription
qstringYesSearch query (title, content, or URL)
year_fromintegerFilter by capture year (1990-1999)
year_tointegerEnd year range
limitintegerMax results (default: 20, max: 100)

Example Request

bash
curl -H 'X-Archive-Key: YOUR_KEY' \
  'https://api.1990webarchive.com/v1/pages/search?q=geocities+personal+page&year_from=1995&limit=5'

Example Response

json
{
  "data": [
    {
      "id": "pg_8a9b7c6d5e4f3g2h",
      "url": "http://www.geocities.com/~user123/home.html",
      "title": "Welcome to My Homepage! ★",
      "captured_at": "1997-08-14T10:22:00Z",
      "tech_stack": ["HTML3.2", "Table Layout", "Animated GIF"],
      "preview_url": "https://archive.1990web.com/render/pg_8a9b7c6d5e4f3g2h"
    }
  ],
  "meta": {
    "total": 12843,
    "page": 1,
    "per_page": 5
  }
}

GET /pages/{id}

Retrieve full metadata and render-ready assets for a specific archived page.

bash
curl -H 'X-Archive-Key: YOUR_KEY' \
  'https://api.1990webarchive.com/v1/pages/pg_8a9b7c6d5e4f3g2h'

Returns complete HTML snapshot, extracted text, linked resources manifest, and cryptographic verification hash.

POST /crawl/submit

Queue a new crawling job for a live or dead URL. Our legacy-compatible crawler will attempt to capture and archive the content.

ParameterTypeRequiredDescription
urlstringYesTarget URL to archive
depthintegerCrawl depth (1-3, default: 1)
browserstringEmulation target (netscape3, ie5, modern)
json
{
  "job_id": "crawl_x9y8z7w6v5u4",
  "status": "queued",
  "eta_seconds": 45,
  "message": "Crawl initiated. Poll /crawl/{job_id}/status for progress."
}

GET /crawl/{job_id}/status

Check the progress of a submitted crawl job. Returns stages: queued, fetching, rendering, archived, failed.

bash
curl -H 'X-Archive-Key: YOUR_KEY' \
  'https://api.1990webarchive.com/v1/crawl/crawl_x9y8z7w6v5u4/status'

GET /metrics/overview

Retrieve aggregate statistics about the archive, including total pages, era distribution, and storage footprint.

json
{
  "total_pages": 4289103,
  "total_size_gb": 142.7,
  "era_distribution": {
    "1990-1993": 12,
    "1994-1996": 48290,
    "1997-1999": 4236001
  }
}

Error Codes

The API uses standard HTTP status codes with extended application-level error payloads.

CodeMeaningDescription
400Bad RequestInvalid parameters or malformed JSON
401UnauthorizedMissing or invalid X-Archive-Key
403ForbiddenKey lacks permission for this endpoint
404Not FoundPage ID or crawl job does not exist
429Too Many RequestsRate limit exceeded. Retry after header value.
500Server ErrorInternal archive storage or rendering failure
json
{
  "error": {
    "code": 401,
    "message": "Authentication required",
    "documentation_url": "https://docs.1990webarchive.com/errors/401"
  }
}

SDKs & Libraries

Official client libraries are available for popular languages. Community-maintained wrappers are also supported.

text
JavaScript/Node.js: npm install @1990archive/sdk
Python:           pip install 1990-archive-client
Rust:             cargo add archive90-rs
Go:               go get github.com/1990archive/go-sdk
"}