Skip to content
Back to skills

Ia

ASecurity

Interact with Internet Archive (archive.org) - upload files, download items, and search the archive using the ia CLI tool. Use when working with archive.org, archiving content, or retrieving historical data.

  • 15 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 6, 2026
ai-agentstypescriptpythongophpbashgitapiperformancedocumentation

Works with

  • claude code
  • cli
  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned October 6, 2026

npx -y skills add MikkoParkkola/nab --skill ia --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ia?

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

Security grade badge for Ia
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mikkoparkkola-nab/badge)](https://www.skillsdirectory.com/skills/mikkoparkkola-nab)

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: ia
description: Interact with Internet Archive (archive.org) - upload files, download items, and search the archive using the ia CLI tool. Use when working with archive.org, archiving content, or retrieving historical data.
allowed-tools: Bash
argument-hint: [search query | identifier | command]
---

# Internet Archive CLI Skill

This skill enables interaction with the Internet Archive (archive.org) using the `ia` command-line tool from the `internetarchive` Python package.

## Items

An item is the fundamental unit on archive.org - a logical grouping of related files sharing common metadata. An item can be a book, a song, an album, a dataset, a movie, an image or set of images, etc. Each item has a unique identifier across the entire archive.

Every item contains:
- Original uploaded files
- Derivative files (automatically generated by archive.org)
- `<identifier>_meta.xml` - item-level metadata
- `<identifier>_files.xml` - file-level metadata

Items must belong to a collection.

### Item Limits

| Constraint | Recommended | Hard Limit |
|------------|-------------|------------|
| Item total size | Under 100GB | ~1TB |
| Files per item | Under 10,000 | 250,000 (performance degrades >10,000) |
| Single file size | Under 50GB | 500-700GB |
| Daily upload | Under 1,000 files | 5,000 files (zips count as 1) |

**Permanent URL patterns:**
- Details page: `https://archive.org/details/<identifier>`
- Download directory: `https://archive.org/download/<identifier>`
- Specific file: `https://archive.org/download/<identifier>/<filename>`
- Item history: `https://archive.org/history/<identifier>`

**Warning:** Never link to server-specific URLs like `ia802304.us.archive.org` - these break when items migrate between servers. Always use the canonical `archive.org` URLs above.

For more details, see: https://archive.org/developers/items.html

## Derivatives

When you upload files to the Internet Archive, the system automatically generates derivative files - converted versions in different formats and resolutions. For example:

- **Video**: Transcoded to h.264, Ogg, and various bitrates
- **Audio**: Converted to MP3 (multiple bitrates), Ogg Vorbis, FLAC
- **Text/Books**: OCR processing, searchable PDFs, EPUB, DjVu
- **Images**: Thumbnails, JPEG 2000, different resolutions

Derivatives make content accessible across different devices and bandwidths. You can identify derivatives in `ia list` output - they have an `original` field pointing to their source file.

To skip derivative generation during upload, use `--no-derive`:
```bash
ia upload my-item file.mp4 --metadata="mediatype:movies" --no-derive
```

For the complete list of source formats and their generated derivatives, see: **https://archive.org/help/derivatives.php**

## Metadata Schema

Internet Archive items use XML-based metadata. Key points:

- **Required fields:** `identifier`, `mediatype`
- **Recommended fields:** `title`, `description`, `creator`, `date`, `subject`, `collection`, `language`
- **Repeatable fields:** collections, creators, subjects, languages support multiple values
- **Custom fields:** You can define unlimited custom metadata fields (must follow XML naming rules)

**Identifier requirements:**
- ASCII alphanumeric, underscores, dashes, or periods only
- Must begin with alphanumeric character
- 5-100 characters (5-80 recommended)
- Unique and unchangeable once set

For the complete metadata schema reference, see: **https://archive.org/developers/metadata-schema**

## Collections

Collections group related items together. Key points:

- **Only IA staff can create collections** - users must request creation
- **Minimum 50 items** required for a new collection
- Items must be related and typically same media type
- Collection creation takes up to two weeks after request

To request a collection, contact Internet Archive with:
- List of item identifiers or search query identifying items
- Desired collection identifier (5-80 chars, alphanumeric only)
- Collection title and description
- At least one subject tag

**Public upload collections** (anyone can upload to):
- `opensource_movies`, `opensource_audio`, `opensource_media` - general media
- `community_texts`, `community_video`, `community_audio` - community contributions

Other collections restrict uploads to designated uploaders only.

## Tool Detection and Installation

Before using any `ia` commands, check if the tool is installed:

```bash
ia --version
```

If the `ia` command is not found, install it using `uv`:

```bash
uv tool install internetarchive
```

Alternative installation methods:
- `pipx install internetarchive`
- `pip install internetarchive`

After installation, verify it works with `ia --version`.

## Global Options

These options work with all `ia` commands:

| Option | Description |
|--------|-------------|
| `-h, --help` | Show help message |
| `-v, --version` | Display version |
| `-c FILE, --config-file` | Path to config file |
| `-l, --log` | Enable logging |
| `-d, --debug` | Enable debug output |

## Configuration and Authentication

Check if `ia` is configured:

```bash
ia configure --whoami
```

If not configured (shows error or empty), the user needs to set up credentials:

1. **Interactive setup**: Run `ia configure` and follow prompts
2. **Get credentials**: IA-S3 keys from https://archive.org/account/s3.php
3. **Config location**: Saves to `~/.config/ia.ini`

### Configure Options

| Option | Description |
|--------|-------------|
| `--whoami` | Print current authenticated user |
| `--show` | Print current config as JSON |
| `--check` | Validate IA-S3 keys (exit 0 if valid, 1 otherwise) |

```bash
# Show current config
ia configure --show

# Validate keys (useful in scripts)
ia configure --check && echo "Keys valid"
```

### Environment Variables

Alternative to config file:
```bash
export IA_ACCESS_KEY_ID="your-access-key"
export IA_SECRET_ACCESS_KEY="your-secret-key"
```

Note: Configuration is required for uploads and metadata modifications. Searching and downloading public items works without authentication.

## User-Agent Identification (Required)

**All requests to the Internet Archive must include a proper User-Agent string** that clearly identifies the source of the request. This applies to every request made via any tool - the `ia` CLI, Python library, direct API calls, curl, or any other HTTP client. This is critical for AI agents, bots, and automated tools.

The `ia` CLI automatically includes a default User-Agent with your access key:
```
internetarchive/5.7.2 (Linux x86_64; N; en; ACCESS_KEY) Python/3.11.0
```

When using Claude Code or other AI/LLM agents, **you must append a custom suffix** that includes:
- The tool/agent name and version (e.g., "Claude Code/1.0.0")
- The model being used if applicable (e.g., "claude-sonnet-4-20250514")
- Any relevant context about the automation

The `--user-agent-suffix` CLI option and `user_agent_suffix` config setting require `internetarchive` version 5.7.2 or newer. The default User-Agent (including access key) is always sent - your suffix is appended to it.

**CLI:**
```bash
ia --user-agent-suffix "Claude Code/1.0.0 (claude-sonnet-4-20250514)" download my-item
```

**INI file (`~/.config/internetarchive/ia.ini`):**
```ini
[general]
user_agent_suffix = Claude Code/1.0.0 (claude-sonnet-4-20250514)
```

**Python API:**
```python
from internetarchive import get_session

session = get_session(config={
    'general': {'user_agent_suffix': 'Claude Code/1.0.0 (claude-sonnet-4-20250514)'}
})
```

The resulting User-Agent will look like:
```
internetarchive/5.7.2 (Linux x86_64; N; en; ACCESS_KEY) Python/3.11.0 Claude Code/1.0.0 (claude-sonnet-4-20250514)
```

This helps the Internet Archive track usage patterns, troubleshoot issues, and maintain service quality. Always be specific - include version numbers, model identifiers, and enough detail to distinguish your tool from others.

## Search Operations

Search the Internet Archive catalog:

```bash
ia search '<query>'
```

### Search Parameters

| Parameter | Description |
|-----------|-------------|
| `--itemlist` | Output identifiers only, one per line |
| `-n, --num-found` | Print only the count of results |
| `-s, --sort` | Sort results: `--sort='field desc'` or `--sort='field asc'` |
| `-f, --field` | Return specific metadata fields (repeatable) |
| `-F, --fts` | Full-text search (search within text content, not just metadata) |
| `--parameters` | Raw query parameters: `--parameters="page=N&rows=N"` |

```bash
# Get result count only
ia search 'collection:nasa' -n

# Sort by date descending
ia search 'mediatype:texts' --sort='date desc'

# Return specific fields
ia search 'collection:nasa' --field=identifier --field=title
```

### Sort Fields

Common sort fields for use with `--sort`:

| Field | Description |
|-------|-------------|
| `date` | Content date |
| `publicdate` | When item was published to archive.org |
| `addeddate` | When added to archive |
| `updatedate` | Last updated |
| `title` / `titleSorter` | Alphabetical by title |
| `creator` / `creatorSorter` | Alphabetical by creator |
| `downloads` | Total downloads |
| `week` | Downloads this week |
| `month` | Downloads this month |
| `num_reviews` | Number of reviews |
| `num_favorites` | Number of favorites |
| `item_size` | Total item size |
| `files_count` | Number of files |

Use `asc` or `desc` suffix:
```bash
ia search 'mediatype:audio' --sort='downloads desc'
ia search 'collection:books' --sort='publicdate asc'
ia search 'creator:NASA' --sort='title asc'
```

### Search Query Syntax

The Internet Archive uses **Apache Lucene query syntax**. By default, the operator is AND (all terms must be present).

#### Query Operators

| Operator | Description |
|----------|-------------|
| `AND` | All terms must be present (default) |
| `OR` | Any of the terms can be present |
| `NOT` | Exclude documents with term (requires at least one positive term) |
| `( )` | Group clauses to form subqueries |

#### Field-Specific Searches

Use `field:value` syntax to search specific metadata fields:

| Query | Description |
|-------|-------------|
| `'title:"search text"'` | By title |
| `'creator:"Author Name"'` | By creator/author |
| `'subject:"topic"'` | Search by subject |
| `'description:"text"'` | By description |
| `'collection:name'` | Items in a collection |
| `'mediatype:texts'` | By media type (texts, movies, audio, software, image, data) |
| `'contributor:smithsonian'` | By contributor |
| `'language:eng'` | By language code |
| `'format:pdf'` | Items containing specific file format |
| `'isbn:9780123456789'` | By ISBN |
| `'licenseurl:http*by-nc*'` | By Creative Commons license |

#### Range Queries

Search values between bounds using brackets or parentheses:

| Syntax | Description |
|--------|-------------|
| `[1000 TO 2000]` | Inclusive range (includes bounds) |
| `{1000 TO 2000}` | Exclusive range (excludes bounds) |
| `[1000 TO null]` | Open-ended range (1000 or greater) |
| `[null TO 2000]` | Open-ended range (2000 or less) |

#### Date Fields

Searchable date fields: `addeddate`, `createdate`, `date`, `indexdate`, `publicdate`, `reviewdate`, `updatedate`, `oai_updatedate`

| Query | Description |
|-------|-------------|
| `'date:[2020-01-01 TO 2024-12-31]'` | Date range |
| `'publicdate:[2024-01-01 TO 2024-06-30]'` | By publication date |
| `'indexdate:[2024-01-01T00:00:00Z TO 2024-12-31T23:59:59Z]'` | With timestamp |
| `'date:2024*'` | Wildcard for year (non-range) |

#### Fuzzy Queries

Append `~` for approximate spelling matches:
```bash
ia search 'title:buttonwood~'

# Boost fuzzy matches with weights
ia search '(title:buttonwood~)^150 OR (subject:buttonwood~)^100'
```

#### Searching for Missing Fields

Find items where a field doesn't exist:
```bash
ia search 'collection:microfiche AND NOT _exists_:creator'
```

#### Searching by Uploader

Search by uploader's user item, screen name, or email:
```bash
ia search '_uploader_useritem:@username'
ia search '_uploader_screenname:"Display Name"'
ia search 'uploader:your@email.com'
```

#### Additional Searchable Fields

Beyond standard metadata, you can search by:
- `downloads` - download count
- `item_size` - total item size in bytes
- `files_count` - number of files
- `collection_size` - size of collection
- `item_count` - items in collection

```bash
ia search 'collection:opensource AND downloads:[1000 TO null]'
ia search 'mediatype:movies AND item_size:[1000000000 TO null]'
```

#### Combined Queries

```bash
# AND is implicit between terms
ia search 'collection:nasa mediatype:image'

# Explicit operators
ia search 'collection:nasa AND mediatype:image'
ia search 'mediatype:texts OR mediatype:audio'
ia search 'collection:opensource NOT mediatype:software'

# Grouped subqueries
ia search '(mediatype:texts OR mediatype:audio) AND creator:"Mark Twain"'
```

### Full-Text Search

Use the `-F` (or `--fts`) flag to search within the actual text content of items rather than just metadata. This is particularly powerful for searching text collections like books, documents, and OCR'd materials.

**Basic full-text search:**
```bash
ia search -F 'collection:collection_name "search phrase"'
```

**How it works:**
- Searches inside the full text of documents (OCR'd PDFs, text files, etc.)
- More powerful than metadata-only search for finding specific quotes or passages
- Requires items to have searchable text (OCR or text files)
- Can be combined with collection and metadata filters

**Full-text search syntax:**
- Use quotes for exact phrases: `"complete phrase"`
- Combine with metadata filters: `collection:name AND "text to find"`
- Works best with text collections that have been OCR'd

### Examples

```bash
# Search NASA images
ia search 'collection:nasa mediatype:image' --parameters="rows=10"

# Search public domain books
ia search 'subject:"public domain" mediatype:texts'

# Get just identifiers
ia search 'creator:"Mark Twain"' --itemlist

# Full-text search within a text collection
ia search -F 'collection:books "climate change"'

# Full-text search for a specific quote in public domain texts
ia search -F '"to be or not to be" mediatype:texts'

# Full-text search with collection filter and pagination
ia search -F 'collection:usgovernmentdocuments "artificial intelligence"' --parameters="rows=20"
```

## Download Operations

Download files from an Internet Archive item:

```bash
ia download <identifier>
```

### Download Parameters

| Parameter | Description |
|-----------|-------------|
| `--glob="*.ext"` | Download only matching files (use `\|` for multiple: `'*.mp4\|*.webm'`) |
| `--exclude="*pattern*"` | Exclude files matching pattern |
| `--format="FORMAT"` | Download specific derivative format |
| `--source=SOURCE` | Filter by source: `original`, `derivative`, `metadata` |
| `--exclude-source=SOURCE` | Exclude by source type |
| `--destdir=path` | Download to specific directory |
| `--no-directories` | Flatten directory structure |
| `-s, --stdout` | Write file to stdout (for piping) |
| `--dry-run` | Show what would be downloaded |
| `--checksum` | Skip files that already exist with correct checksum |
| `--on-the-fly` | Download on-the-fly files (generated derivatives) |
| `--search="QUERY"` | Download from search results |
| `--itemlist=FILE` | Download items listed in file |

#### Filtering by Source Type

Use `--source` and `--exclude-source` to filter by file origin:

```bash
# Download only original files (skip all derivatives)
ia download my-item --source=original

# Download originals and metadata, skip derivatives
ia download my-item --exclude-source=derivative

# Download only metadata files
ia download my-item --source=metadata
```

### Examples

```bash
# Download all files from an item
ia download TripDown1905

# Download specific files by name
ia download TripDown1905 file1.mp4 file2.ogv

# Download only MP4 files
ia download TripDown1905 --glob="*.mp4"

# Download MP4s but exclude low-quality versions
ia download TripDown1905 --glob="*.mp4" --exclude="*512kb*"

# Download specific format
ia download TripDown1905 --format='512Kb MPEG4'

# Download to specific directory
ia download TripDown1905 --destdir=./downloads

# Download from search results
ia download --search 'collection:opensource_movies' --glob="*.mp4"

# Download items from a list file
ia search 'collection:glasgowschoolofart' --itemlist > itemlist.txt
ia download --itemlist itemlist.txt

# Preview what will be downloaded
ia download my_item --dry-run
```

## Upload Operations

Upload files to the Internet Archive (requires authentication):

```bash
ia upload <identifier> file1 file2 --metadata="mediatype:value"
```

### Required Metadata

The `mediatype` field is required. Common values:
- `texts` - Books, documents, PDFs
- `movies` - Video files
- `audio` - Music, podcasts, sound
- `software` - Programs, games
- `image` - Photos, graphics
- `data` - Datasets, archives

### Upload Parameters

| Parameter | Description |
|-----------|-------------|
| `--metadata="key:value"` | Set metadata (repeatable) |
| `--header="key:value"` | Set HTTP header |
| `--checksum` | Skip files already uploaded |
| `-v, --verify` | Verify data wasn't corrupted after upload |
| `--no-derive` | Skip derivative processing |
| `--retries=N` | Number of retry attempts |
| `--remote-name=NAME` | Set remote filename (for stdin uploads) |
| `--keep-directories` | Preserve directory structure in remote filename |
| `-o, --open-after-upload` | Open item in browser after upload |
| `--file-metadata=FILE` | File-level metadata from JSONL file |
| `--spreadsheet=FILE` | Bulk upload from CSV spreadsheet |

### Common Metadata Fields

```bash
--metadata="title:My Document Title"
--metadata="creator:Author Name"
--metadata="description:A description of the content"
--metadata="subject:topic1;topic2"
--metadata="collection:community_texts"
--metadata="date:2024-01-15"
--metadata="language:eng"
```

### Examples

```bash
# Upload a PDF document
ia upload my-document-2024 document.pdf \
  --metadata="mediatype:texts" \
  --metadata="title:My Document" \
  --metadata="creator:John Doe"

# Upload multiple files
ia upload my-archive file1.pdf file2.pdf file3.pdf \
  --metadata="mediatype:texts" \
  --metadata="title:Document Collection"

# Upload with checksum verification and retries
ia upload my-item large-file.zip \
  --metadata="mediatype:data" \
  --checksum \
  --retries=10

# Upload from stdin
cat data.gz | ia upload my-item - \
  --remote-name=data.gz \
  --metadata="mediatype:data"

# Bulk upload using spreadsheet
ia upload --spreadsheet=metadata.csv
```

**Notes:**
- Items receive `data` mediatype by default if not specified
- Mediatype can only be changed after upload with admin support
- Derivative generation takes seconds to days depending on file type and system load
- Items typically appear in search within minutes, but can take up to 24 hours

### Test Collection

Upload to `test_collection` for validation - items are automatically removed after ~30 days:

```bash
ia upload my-test-item file.pdf \
  --metadata="mediatype:texts" \
  --metadata="collection:test_collection"
```

### Identifier Guidelines

- Use lowercase letters, numbers, and hyphens
- No spaces or special characters
- Keep it descriptive but concise
- Check if identifier exists: `ia metadata <identifier> --exists`

### Item Thumbnail Image

To set a custom thumbnail for an item, upload an image named `<identifier>_itemimage.jpg`:

```bash
ia upload my-item my-item_itemimage.jpg
```

### Restricting Downloads

To make files streamable but not downloadable, add the item to the `stream_only` collection:

```bash
ia metadata <identifier> --append-list="collection:stream_only"
```

## Metadata Operations

View and modify item metadata:

```bash
# View metadata (JSON output)
ia metadata <identifier>

# Extract specific field with jq
ia metadata <identifier> | jq '.metadata.date'

# List file formats contained in an item
ia metadata <identifier> --formats

# Modify metadata (set or replace)
ia metadata <identifier> --modify="title:New Title"
ia metadata <identifier> --modify="foo:bar" --modify="baz:value"

# Remove a metadata field
ia metadata <identifier> --modify="fieldname:REMOVE_TAG"

# Append value to existing field
ia metadata <identifier> --append="title:Subtitle Here"

# Append to list field (e.g., subjects)
ia metadata <identifier> --append-list="subject:new topic"

# Remove specific value from list field
ia metadata <identifier> --remove="subject:old topic"

# Modify file-level metadata
ia metadata <identifier> --target="files/foo.txt" --modify="title:My File"

# Bulk updates from spreadsheet
ia metadata --spreadsheet=metadata.csv
```

## List Operations

List files in an Internet Archive item:

```bash
ia list <identifier>
```

Shows all files with details (name, size, format).

### List Parameters

| Parameter | Description |
|-----------|-------------|
| `--columns=name,size` | Specify columns to show |
| `--glob="*.pdf"` | Filter by pattern |
| `-l, --location` | Print full URLs for each file |
| `-a, --all` | List all available file information |
| `-v, --verbose` | Print column headers |

```bash
# List with full URLs
ia list my-item --location

# List all file info with headers
ia list my-item --all --verbose

# List specific columns
ia list my-item --columns=name,size,format
```

## Tasks and Jobs

Check status of catalog tasks (uploads, derives, etc.):

```bash
# Check tasks for a specific item
ia tasks <identifier>

# Check all your tasks
ia tasks
```

### Darking and Undarking Items

To make an item dark (hidden from public access) or undark it:

```bash
# Dark an item (requires comment)
ia tasks <identifier> --cmd=make_dark.php --comment="Reason for darking"

# Undark an item
ia tasks <identifier> --cmd=make_undark.php --comment="Reason for undarking"
```

## Bulk Operations with GNU Parallel

For batch processing many items, use [GNU Parallel](https://www.gnu.org/software/parallel/) to run `ia` commands concurrently.

### Installation

```bash
# macOS
brew install parallel

# Debian/Ubuntu
apt install parallel
```

### Basic Usage

Pipe item identifiers to parallel, using `{}` as placeholder:

```bash
# Fetch metadata for many items
cat itemlist.txt | parallel 'ia metadata {}'

# Download multiple items
cat itemlist.txt | parallel 'ia download {}'
```

### Careful Batch Processing

For reliable bulk operations, use job logging to track progress and handle failures:

```bash
# Step 1: Create item list
ia search 'collection:myproject' --itemlist > itemlist.txt

# Step 2: Run with job logging
cat itemlist.txt | parallel --joblog job.log 'ia download {}'

# Step 3: Check for failures
echo $?  # 0 = all succeeded

# Step 4: Retry only failed jobs
parallel --retry-failed --joblog job.log
```

### Job Log Benefits

The `--joblog` file tracks each command's exit status, allowing you to:
- Resume interrupted batch jobs
- Retry only failed items without re-processing successes
- Audit what succeeded and failed

### Dry Run First

Always preview before bulk execution:

```bash
cat itemlist.txt | parallel --dry-run 'ia download {}'
```

### Rate Limiting

Control concurrency to avoid overwhelming the server:

```bash
# Limit to 4 concurrent jobs
cat itemlist.txt | parallel -j4 'ia download {}'

# Add delay between jobs
cat itemlist.txt | parallel --delay 1 'ia download {}'
```

See: https://archive.org/developers/internetarchive/parallel.html

## Best Practices

1. **Always configure before uploading** - Run `ia configure` first
2. **Use meaningful identifiers** - Descriptive, lowercase, hyphenated
3. **Include proper metadata** - At minimum: mediatype, title, creator
4. **Check before uploading** - Verify identifier doesn't exist: `ia metadata <id>`
5. **Use checksums** - Add `--checksum` for large uploads to enable resume
6. **Respect rate limits** - Don't spam requests; add delays for bulk operations
7. **Test with dry-run** - Use `--dry-run` to preview operations
8. **Use test_collection first** - Validate uploads before committing to permanent collections
9. **Zip large file sets** - Bundle many small files into archives before uploading
10. **Specify language** - Set `language` metadata for proper OCR processing on texts

## Error Handling

| Error | Solution |
|-------|----------|
| "not configured" | Run `ia configure` or set environment variables |
| "identifier exists" | Choose a different identifier |
| "permission denied" | Check credentials at https://archive.org/account/s3.php |
| "network error" | Retry the operation; check internet connection |
| "item not found" | Verify the identifier spelling |
| "429 Too Many Requests" | Rate limited; wait and retry with `Retry-After` header value |
| Item not appearing in search | Usually appears within minutes; check `ia tasks <identifier>` for pending jobs |
| Derive task failed | Check filename characters, file format, language metadata |

## Quick Reference

```bash
# Search
ia search 'query'
ia search 'query' --itemlist

# Download
ia download <identifier>
ia download <identifier> --glob="*.pdf"

# Upload (requires auth)
ia upload <identifier> files --metadata="mediatype:texts"

# Metadata
ia metadata <identifier>
ia metadata <identifier> --modify="title:New Title"

# List files
ia list <identifier>

# Tasks
ia tasks <identifier>

# Config
ia configure
ia configure --whoami

# Install
uv tool install internetarchive
```

## API Reference

For programmatic access beyond the CLI, see the full developer documentation: **https://archive.org/developers**

### Core APIs

| API | Description |
|-----|-------------|
| [Items](https://archive.org/developers/items.html) | Understanding item structure and access |
| [Metadata Schema](https://archive.org/developers/metadata-schema/) | Complete metadata field reference |
| [Metadata Read](https://archive.org/developers/md-read.html) | Retrieve item metadata via API |
| [Metadata Write](https://archive.org/developers/md-write.html) | Modify item metadata via API |
| [IAS3](https://archive.org/developers/ias3.html) | S3-compatible API for uploads |
| [Tasks](https://archive.org/developers/tasks.html) | Task queue management |

### Additional APIs

| API | Description |
|-----|-------------|
| [Changes](https://archive.org/developers/changes.html) | Track item modifications across the archive |
| [Views](https://archive.org/developers/views_api.html) | Access viewing and download statistics |
| [Reviews](https://archive.org/developers/reviews.html) | Manage item reviews |
| [Simple Lists](https://archive.org/developers/simplelists.html) | Create item relationships and lists |
| [OCR Service](https://archive.org/developers/ocr.html) | Text recognition service |
| [PDF Service](https://archive.org/developers/pdf.html) | PDF generation and processing |

### Python Library

For Python integration: [internetarchive library](https://archive.org/developers/internetarchive/)

### TypeScript Library (Third-Party)

A community-maintained TypeScript port is available: [internetarchive-ts](https://github.com/karpour/internetarchive-ts) ([docs](https://karpour.github.io/internetarchive-ts/))

Note: This is a work in progress and not officially maintained by the Internet Archive.

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.