Skip to content
Back to skills

Wayback Machine Raw Content Id Modifier

ASecurity

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.

  • 265 stars
  • 0 votes
  • 0 copies
  • 7 views
  • Added May 27, 2026
developmentjavascriptpythonjavabashgitapi

Works with

  • claude code
  • api

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add divinevideo/divine-mobile --skill wayback-machine-raw-content-id-modifier --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Wayback Machine Raw Content Id Modifier?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Wayback Machine Raw Content Id Modifier
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/divinevideo-wayback-machine-raw-content-id-modifier/badge)](https://www.skillsdirectory.com/skills/divinevideo-wayback-machine-raw-content-id-modifier)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.