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
| Parameter | Value | Description |
|---|---|---|
| Host | z3950.1990webarchive.net | Primary Z39.50 endpoint |
| Port | 210 | Standard Z39.50 TCP port |
| Database | WEBARCHIVE-HIST | Historical web corpus index |
| Prefix | wa | Custom element set namespace |
| Encoding | UTF-8 | Character 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
| Field Code | Description | Example |
|---|---|---|
wa.uri | Original archived URL | http://angelfire.com/alpha/dragon |
wa.capture_date | ISO 8601 capture timestamp | 1998-04-12T08:30:00Z |
wa.mime | MIME type at capture | text/html |
wa.size | File size in bytes | 14285 |
wa.host | Registrar/ISP hosting | geocities.yahoo |
wa.tags | Auto-classified metadata | |
wa.technologies | Detected stack |
Record Formats
Specify the desired output format in the FetchRequest elementSetID.
1— GRS-1 (Recommended): Native Z39.50 structured record with wa-prefixed attributes.5— USMARC: Legacy library format with 9XX fields mapped to wa metadata.9— JSON: Modern fallback (elementSetID 9). Returns clean key-value pairs.
Protocol Operations
Z39.50 session lifecycle for archive access:
- Init — Establish connection, negotiate options, authenticate
- Scan — Browse available facets, thresholds, and spell-correction
- Search — Submit CCL/RPN query, receive result set ID & count
- Fetch — Retrieve records in batches (default 20 per request)
- Sort — Reorder result set by
wa.year,wa.size, or relevance - 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.
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.