Implementation Guide
Official documentation for developers, archivists, and researchers integrating with the 1990 Web Archive infrastructure.
This guide covers API authentication, crawler configuration, legacy rendering parameters, and data export protocols. All endpoints use secure TLS 1.3 and support both JSON and WARC payloads.
Legacy HTTP endpoints (pre-2018) have been deprecated. Use the `v2/` namespace for all new integrations. Migration tools are available in the CLI.
Quick Start
1. Install the CLI
npm install -g @1990archive/cli archive login --token YOUR_API_KEY
2. Run your first crawl
archive crawl --url "http://geocities.com/area/51/" \
--depth 2 \
--engine netscape3.0 \
--output ./archive-geo-1995.warc
Verify the output using the built-in validator:
archive validate ./archive-geo-1995.warc [✓] 42 resources captured [✓] Integrity checksum: a7f9c2d...
Authentication
All API requests require a Bearer token in the `Authorization` header. Tokens are scoped to your organization and expire after 30 days by default.
| Scope | Access Level | Rate Limit |
|---|---|---|
read:archive | View & download public records | 1000 req/min |
write:crawl | Submit custom crawl jobs | 50 jobs/hr |
admin:render | Custom emulation configs | Unlimited* |
* Enterprise tier required for admin scopes.
curl -X GET https://api.1990archive.org/v2/search \ -H "Authorization: Bearer sk_live_90web_..." \ -H "Content-Type: application/json"
Crawler API
Configuration Schema
Crawl jobs accept a JSON payload. Key fields include `url`, `depth`, `engine`, and `filters`.
{
"url": "http://www.example.com/1996/",
"depth": 3,
"engine": "netscape3.0",
"filters": {
"include": [".html", ".gif", ".mid"],
"exclude": ["javascript:*"]
},
"respect_robots": false,
"legacy_mode": true
}
When `legacy_mode` is true, the crawler bypasses modern TLS handshake requirements and negotiates using SSLv3/TLS 1.0 protocols where necessary for authentic 1990s infrastructure emulation.
Rendering & Emulation
The rendering engine supports deterministic playback of historical user agents. Available profiles:
- Netscape Navigator 3.0 (1996) - Table layouts, early CSS, MIDI autoplay
- Internet Explorer 3.02 (1996) - ActiveX quirks, proprietary DHTML
- Opera 3.5 (1998) - Lightweight rendering, early frames support
archive render --warc ./site.warc \
--profile ie3.02 \
--resolution 800x600 \
--font-fallback "Times New Roman" \
--screenshot ./output.png
Data Export
Archives can be exported in multiple formats depending on your use case:
| Format | Best For | Extension |
|---|---|---|
| WARC (v1.1) | Long-term preservation | .warc.gz |
| HTML Bundle | Local browsing | .zip |
| Memento JSON | Time-travel APIs | .json |
| CSV Metadata | Analytics & indexing | .csv |
Use the `--format` flag to specify output type. Large exports are streamed via signed URLs with 24-hour expiration.
Rate Limits & Best Practices
The API enforces rate limits to preserve infrastructure stability. Always implement exponential backoff.
- Monitor the
X-RateLimit-Remainingheader - Use
Accept-Encoding: gzipto reduce bandwidth - Cache WARC responses locally when possible
- Avoid crawling dynamic JS-heavy pages in legacy mode
async fetchWithBackoff(url) { let retries = 3; while (retries > 0) { const res = await fetch(url); if (res.status !== 429) return res; await sleep(1000 * (3 - retries)); retries--; } }
Troubleshooting
| Error | Cause | Resolution |
|---|---|---|
E_TLS_LEGACY | Target server dropped SSLv3 | Disable `legacy_mode` or use proxy |
W_RENDER_TIMEOUT | Heavy Flash/MIDI load | Reduce resolution or disable media |
E_404_MEMENTO | Timestamp out of archive range | Verify `memento-datetime` header |
W_MIME_MISMATCH | Server sends incorrect content-type | Archive will auto-detect & warn |
Still stuck? Open an issue on GitHub or contact dev-support@1990archive.org with your request ID.