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.

⚡ Platform Notice

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

bash
npm install -g @1990archive/cli
archive login --token YOUR_API_KEY

2. Run your first crawl

bash
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:

bash
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:archiveView & download public records1000 req/min
write:crawlSubmit custom crawl jobs50 jobs/hr
admin:renderCustom emulation configsUnlimited*

* Enterprise tier required for admin scopes.

curl
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`.

json
{
  "url": "http://www.example.com/1996/",
  "depth": 3,
  "engine": "netscape3.0",
  "filters": {
    "include": [".html", ".gif", ".mid"],
    "exclude": ["javascript:*"]
  },
  "respect_robots": false,
  "legacy_mode": true
}
🔍 Legacy Mode

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
bash
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:

FormatBest ForExtension
WARC (v1.1)Long-term preservation.warc.gz
HTML BundleLocal browsing.zip
Memento JSONTime-travel APIs.json
CSV MetadataAnalytics & 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-Remaining header
  • Use Accept-Encoding: gzip to reduce bandwidth
  • Cache WARC responses locally when possible
  • Avoid crawling dynamic JS-heavy pages in legacy mode
javascript
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

ErrorCauseResolution
E_TLS_LEGACYTarget server dropped SSLv3Disable `legacy_mode` or use proxy
W_RENDER_TIMEOUTHeavy Flash/MIDI loadReduce resolution or disable media
E_404_MEMENTOTimestamp out of archive rangeVerify `memento-datetime` header
W_MIME_MISMATCHServer sends incorrect content-typeArchive will auto-detect & warn

Still stuck? Open an issue on GitHub or contact dev-support@1990archive.org with your request ID.