v2.4.1 Stable

Developer API

Access decades of preserved web history programmatically. RESTful endpoints, modern SDKs, and consistent pagination for building archival tools, research pipelines, and retro web experiences.

Quick Start

Get up and running in under a minute. Install our CLI or SDK to start querying the archive immediately.

# Install the official JavaScript/TypeScript SDK npm install @1990-archive/sdk # Basic usage import { ArchiveClient } from '@1990-archive/sdk'; const client = new ArchiveClient({ apiKey: process.env.ARCHIVE_API_KEY }); const results = await client.search({ era: '1990s', query: 'geocities personal homepage', limit: 10 }); console.log(results.pages.length);
# Install the official Python client pip install archive1990 # Basic usage from archive1990 import ArchiveClient client = ArchiveClient(api_key=os.environ["ARCHIVE_API_KEY"]) results = client.search( era="1990s", query="dotcom boom startup", limit=10 ) print(len(results.pages))
curl https://api.1990webarchive.com/v1/archive/search \\ -H "Authorization: Bearer YOUR_API_KEY" \\ -H "Content-Type: application/json" \\ -d '{"era": "1990s", "query": "under construction", "limit": 10}'

Authentication

All API requests require authentication via API Key or OAuth 2.0. Keys are tied to your organization workspace and can be managed in the developer dashboard.

⚠️ Security Notice: Never expose your secret API keys in client-side code or public repositories. Use environment variables or a secure vault.

API Key Header

Include your key in the Authorization header using the Bearer scheme:

Authorization: Bearer ak_live_7x92mKp4nQw8vR3zL5

OAuth 2.0 (Server-to-Server)

For automated pipelines requiring rotating credentials, use our OAuth client credentials flow. Request a token at:

POST https://auth.1990webarchive.com/oauth/token

API Reference

Our REST API follows consistent naming, pagination, and error formats. All endpoints are prefixed with /v1.

GET
/v1/archive/search
Query indexed pages with full-text, metadata, and temporal filters.
GET
/v1/archive/render/:id
Retrieve pixel-perfect HTML/CSS/GIF snapshot as it appeared in its original era.
GET
/v1/archive/metadata/:url
Fetch technical metadata: crawl date, tech stack, DOM stats, and hash verification.
POST
/v1/archive/submit
Submit new URLs for immediate crawling and permanent archival.
GET
/v1/user/quota
Check remaining requests, storage allocation, and tier status.
GET
/v1/archive/trends
Aggregate analytics on web design evolution, tech adoption, and traffic patterns.

SDKs & Libraries

Officially maintained libraries for your preferred stack. Community packages are welcome via GitHub.

Language Package Version ────────────────────────────────────────────────────────── JavaScript/Node @1990-archive/sdk v2.4.1 Python archive1990 v1.8.0 Go github.com/1990archive/go v0.9.2 Rust 1990_archive v0.7.4 Ruby web_archive_1990 v2.1.0

Rate Limits & Tiers

We offer tiered access to ensure stability and fair usage across the archival network. All tiers include 99.9% uptime SLA.

Tier Requests / min Concurrent Jobs Storage Access Price
Developer 60 2 Read-only (1990-1995) Free
Researcher 300 10 Full Era Access $29/mo
Enterprise Custom Unlimited Dedicated Nodes + Raw Dumps Contact Sales

Rate limit headers X-RateLimit-Remaining and X-RateLimit-Reset are included in every response. Exceeding limits returns 429 Too Many Requests.

Error Handling

The API uses conventional HTTP status codes. Errors return a consistent JSON structure:

{ "error": { "code": "NOT_FOUND", "message": "Archive ID 'page_8821' does not exist or has been purged.", "request_id": "req_9x72mKp4nQw8", "doc_url": "https://docs.1990webarchive.com/errors#not_found" } }