Fix JSON parse errors when fetching archived API responses from Wayback Machine. Use when: (1) Getting "Expecting value: line 1 column 1 (char 0)" JSON decode errors from archived URLs, (2) Wayback returns HTML instead of expected JSON/raw content, (3) Crawling archived REST APIs or JSON endpoints from web.archive.org. The `id_` modifier returns raw content without the Wayback toolbar wrapper.
Scanned 5/27/2026
Install via CLI
openskills install divinevideo/divine-mobile---
name: wayback-machine-raw-content-id-modifier
description: |
Fix JSON parse errors when fetching archived API responses from Wayback Machine. Use when:
(1) Getting "Expecting value: line 1 column 1 (char 0)" JSON decode errors from archived URLs,
(2) Wayback returns HTML instead of expected JSON/raw content, (3) Crawling archived REST APIs
or JSON endpoints from web.archive.org. The `id_` modifier returns raw content without the
Wayback toolbar wrapper.
author: Claude Code
version: 1.0.0
date: 2026-01-20
---
# Wayback Machine Raw Content with id_ Modifier
## Problem
When fetching archived JSON API endpoints from the Wayback Machine, you get HTML-wrapped
content with the Wayback toolbar instead of the raw JSON response. This causes JSON parse
errors like "Expecting value: line 1 column 1 (char 0)" because the response starts with
`<!DOCTYPE html>` instead of valid JSON.
## Context / Trigger Conditions
- Fetching archived API endpoints from `web.archive.org/web/{timestamp}/{url}`
- JSON parsing fails with "Expecting value: line 1 column 1 (char 0)"
- Response content starts with HTML instead of expected JSON
- Crawling archived REST APIs, JSON feeds, or any non-HTML content from Wayback
- Using Python `json.loads()`, `response.json()`, or similar JSON parsing
## Solution
Add `id_` after the timestamp in the Wayback URL to get raw content:
**Default (HTML-wrapped):**
```
https://web.archive.org/web/20170112012313/https://vine.co/api/users/profiles/123
```
**Raw content (add `id_`):**
```
https://web.archive.org/web/20170112012313id_/https://vine.co/api/users/profiles/123
```
### Code Fix Pattern
```python
# BEFORE (broken - returns HTML)
url = f"https://web.archive.org/web/{timestamp}/https://example.com/api/data"
# AFTER (works - returns raw JSON)
url = f"https://web.archive.org/web/{timestamp}id_/https://example.com/api/data"
```
### Other Wayback Modifiers
- `id_` - Raw/identity (no modifications, returns original content)
- `if_` - Iframe embed mode
- `js_` - JavaScript rewriting mode
- `cs_` - CSS rewriting mode
- `im_` - Image mode
## Verification
1. Test the URL with curl to see actual response:
```bash
# Without id_ - shows HTML with Wayback toolbar
curl -s "https://web.archive.org/web/20170112012313/https://example.com/api/data" | head -5
# With id_ - shows raw JSON
curl -s "https://web.archive.org/web/20170112012313id_/https://example.com/api/data" | head -5
```
2. Verify JSON parsing works:
```python
import json
import urllib.request
url = f"https://web.archive.org/web/{timestamp}id_/{api_url}"
with urllib.request.urlopen(url) as resp:
data = json.loads(resp.read()) # Should work now
```
## Example
Crawling archived Vine API profiles:
```python
WAYBACK_BASE = "https://web.archive.org/web"
def fetch_profile(user_id: str, timestamp: str):
# Use id_ modifier to get raw JSON instead of HTML-wrapped content
url = f"{WAYBACK_BASE}/{timestamp}id_/https://vine.co/api/users/profiles/{user_id}"
with urllib.request.urlopen(url) as resp:
data = json.loads(resp.read())
return data['data'] # Now works correctly
```
## Notes
- The `id_` modifier works for any content type, not just JSON (images, CSS, JS, etc.)
- Some archived content may still fail if it was never properly captured
- CDX API queries (for finding archived URLs) don't need the modifier
- Rate limit requests to archive.org (5+ seconds between requests recommended)
- Empty responses (0 bytes) indicate the archive entry exists but content wasn't captured
## References
- [Wayback Machine URL Modifiers](https://archive.org/help/wayback-api/)
- [CDX Server API](https://github.com/internetarchive/wayback/tree/master/wayback-cdx-server)
No comments yet. Be the first to comment!