Z39.50 Protocol Access

The 1990 Web Archive exposes its historical index via ISO 239.50 (Z39.50) for seamless integration with legacy library systems, academic catalogs, and custom archival clients. This endpoint supports CCL (Contextual Control Language) querying, GRS-1/USMARC record retrieval, and authenticated session management.

ℹ️ Z39.50 provides structured, faceted access to our pre-2000 web corpus. For modern REST/GraphQL access, see our JSON API documentation.

Connection Parameters

ParameterValueDescription
Hostz3950.1990webarchive.netPrimary Z39.50 endpoint
Port210Standard Z39.50 TCP port
DatabaseWEBARCHIVE-HISTHistorical web corpus index
PrefixwaCustom element set namespace
EncodingUTF-8Character set for queries/responses

Authentication

Access requires a reader credential or institutional API key. Provide authentication during the Init request.

InitRequest { "databaseName": "WEBARCHIVE-HIST", "preferredMessageSize": 65536, "authentication": { "method": "clearText", "user": "researcher@1990archive.net", "password": "YOUR_API_KEY" } }

Query Syntax (CCL)

Queries use Contextual Control Language (CCL). The archive uses the custom wa prefix for web-specific metadata.

# Search by domain and year range wa.domain == "geocities.com" AND wa.year BETWEEN 1996 AND 1999 # Find pages with animated GIFs wa.tags == "animated-gif" AND wa.size < 50000 # Phrase search in HTML body wa.body == "under construction" AND wa.mime == "text/html"
⚠️ CCL queries are case-insensitive by default. Use ~(CASE) modifier for exact case matching.

Custom Field Mappings

["guestbook","webring","midi"]["frames","tables","flash"]
Field CodeDescriptionExample
wa.uriOriginal archived URLhttp://angelfire.com/alpha/dragon
wa.capture_dateISO 8601 capture timestamp1998-04-12T08:30:00Z
wa.mimeMIME type at capturetext/html
wa.sizeFile size in bytes14285
wa.hostRegistrar/ISP hostinggeocities.yahoo
wa.tagsAuto-classified metadata
wa.technologiesDetected stack

Record Formats

Specify the desired output format in the FetchRequest elementSetID.

  • 1GRS-1 (Recommended): Native Z39.50 structured record with wa-prefixed attributes.
  • 5USMARC: Legacy library format with 9XX fields mapped to wa metadata.
  • 9JSON: Modern fallback (elementSetID 9). Returns clean key-value pairs.
http://geocities.com/SunsetStrip/4821/ 1997-11-03T14:22:00Z 21044

Protocol Operations

Z39.50 session lifecycle for archive access:

  1. Init — Establish connection, negotiate options, authenticate
  2. Scan — Browse available facets, thresholds, and spell-correction
  3. Search — Submit CCL/RPN query, receive result set ID & count
  4. Fetch — Retrieve records in batches (default 20 per request)
  5. Sort — Reorder result set by wa.year, wa.size, or relevance
  6. Close — Release server-side result set and terminate session

Client Examples

YAZ Client (CLI)

$ yaz-client -h z3950.1990webarchive.net -p 210 -v WEBARCHIVE-HIST [1990archive>] cql search wa.domain == "angelfire.com" AND wa.year == 1998 Found 48,210 records. [1990archive>] fetch 1-10 [GRS-1 records streamed...]

Python (pyz3950)

import pyz3950 with pyz3950.Client("z3950.1990webarchive.net", 210) as conn: conn.init("WEBARCHIVE-HIST", user="reader", password="KEY") results = conn.search("wa.tags == 'guestbook'") print(f"Hits: {results.count}") for rec in results.fetch(1, 20, format="json"): print(rec["wa.uri"])

Rate Limits & Notes

⚠️
Rate Limiting: Max 10 queries/second per IP. Sustained high throughput requires institutional tier.
Result Caps: Max 50,000 records per result set. Use offset pagination via Fetch ranges.
Deprecation Notice: RPN queries are supported but CCL is preferred. USMARC mapping will sunset in v4.2.

For support, integration testing, or bulk access agreements, contact z3950-support@1990webarchive.net.