Developer API Reference
SuperArchive is the permanent knowledge layer for AI: archive files and URLs permanently on Arweave, and let anyone independently verify them forever. Official developer guidelines and schemas below.
Upload and archive a file permanently onto the Arweave blockchain. Supports three distinct encryption schemes (A, B, and C) depending on request parameters and headers. Every archive returns permanent proof information (content hash, transaction ID, timestamp) that can be independently verified forever via /api/v1/verify/{archive_id}.
| Header Name | Type | Necessity | Description |
|---|---|---|---|
Authorization |
String | Required | Credentials prefix. Must be formatted as: Bearer sa_live_YOUR_API_KEY |
X-Encryption-Key |
String | Optional | User-Managed symmetric AES-256-GCM passphrase (Option B). Discarded immediately after encryption. |
| Param Name | Type | Necessity | Description |
|---|---|---|---|
file |
Binary | Required | Raw file stream bytes to be archived permanently. |
enable_server_encryption |
Boolean | Optional | If set to true, applies Server-Managed encryption (Option C). Defaults to false. |
custom_tags_json |
String | Optional | Custom on-chain metadata tags as a stringified JSON dict, e.g. {"Project": "Phoenix"}. |
title |
String | Optional | AI-ready metadata: human-readable title. Defaults to the original filename if omitted. |
description |
String | Optional | AI-ready metadata: short description/summary of the content. |
source_url |
String | Optional | AI-ready metadata: original source URL the content was captured from, if any. |
language |
String | Optional | AI-ready metadata: ISO 639-1 language code, e.g. en. |
tags_json |
String | Optional | AI-ready metadata: JSON array of topical tags, e.g. ["research","AI"]. |
import requests
url = "https://api.sarchive.saltycat.tw/api/v1/SuperArchive"
headers = {
"Authorization": "Bearer sa_live_YOUR_API_KEY"
}
files = {
"file": ("contract.pdf", open("contract.pdf", "rb"), "application/pdf")
}
data = {
"enable_server_encryption": "true", # Trigger Server-Managed Option C
"custom_tags_json": '{"Project": "Phoenix", "Confidential": "true"}',
"title": "Q3 Vendor Contract",
"tags_json": '["legal", "contract"]'
}
response = requests.post(url, headers=headers, files=files, data=data)
print(response.json())
{
"success": true,
"archive_id": "PRG-nUoKkh-tumHe2pyJSTnrfaAuiWHsanZd7XUDOH4",
"arweave_tx_id": "PRG-nUoKkh-tumHe2pyJSTnrfaAuiWHsanZd7XUDOH4",
"arweave_url": "https://arweave.net/PRG-nUoKkh-tumHe2pyJSTnrfaAuiWHsanZd7XUDOH4",
"sha256": "5ef8433ee79975c72679dd441eb042f114ad4e6664f1efd8ebfb510a6b4de74c",
"file_size": 123456,
"content_type": "application/pdf",
"created_at": "2026-07-14T10:00:00Z",
"status": "permanent",
"metadata": {
"title": "Q3 Vendor Contract",
"description": null,
"source_url": null,
"language": null,
"content_type": "application/pdf",
"tags": ["legal", "contract"],
"created_at": "2026-07-14T10:00:00Z"
},
"tx_id": "PRG-nUoKkh-tumHe2pyJSTnrfaAuiWHsanZd7XUDOH4",
"filename": "contract.pdf",
"filesize": 123456,
"points_deducted": 0,
"upload_method": "turbo"
}
Archives a live webpage permanently: downloads an HTML snapshot, extracts structured metadata (title, description, language), computes a SHA-256 fingerprint, and uploads it to Arweave โ turning any URL into a permanent, verifiable knowledge asset. Ideal for research citations, web evidence, and RAG/AI knowledge sources.
| Header Name | Type | Necessity | Description |
|---|---|---|---|
Authorization |
String | Required | Credentials prefix. Must be formatted as: Bearer sa_live_YOUR_API_KEY |
Content-Type |
String | Required | Must be application/json. |
| Param Name | Type | Necessity | Description |
|---|---|---|---|
url |
String | Required | The absolute http(s):// URL of the webpage to snapshot and archive. |
tags |
Array<String> | Optional | AI-ready metadata: topical tags, e.g. ["research", "AI"]. |
import requests
url = "https://api.sarchive.saltycat.tw/api/v1/archive/url"
headers = {
"Authorization": "Bearer sa_live_YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"url": "https://example.com/article",
"tags": ["research", "AI"]
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())
{
"url": "https://example.com/article",
"archive_id": "5QVqnCuXKr5wG-E7AsCDiyKuHuZ3EN_cKK9sXkscHho",
"arweave_tx_id": "5QVqnCuXKr5wG-E7AsCDiyKuHuZ3EN_cKK9sXkscHho",
"sha256": "ff67a9d764d6a2367a187734e697f6a53217db9a21c101d410a113ca871a299d",
"title": "Example Article Title",
"success": true,
"resolved_url": "https://example.com/article",
"arweave_url": "https://arweave.net/5QVqnCuXKr5wG-E7AsCDiyKuHuZ3EN_cKK9sXkscHho",
"file_size": 45210,
"content_type": "text/html",
"created_at": "2026-07-14T10:00:00Z",
"status": "permanent",
"points_deducted": 0,
"upload_method": "turbo",
"metadata": {
"title": "Example Article Title",
"description": "A short summary extracted from the page's meta description.",
"source_url": "https://example.com/article",
"language": "en",
"content_type": "text/html",
"tags": ["research", "AI"],
"created_at": "2026-07-14T10:00:00Z"
}
}
Retrieves and streams file bytes directly from decentralized Arweave gateways. Supports automated on-the-fly decryption for server-managed files, or user-managed key decrypts.
| Header Name | Type | Necessity | Description |
|---|---|---|---|
X-Encryption-Key |
String | Optional | Symmetric AES-256-GCM key. Required only for User-Managed encrypted files (Option B). |
# Direct download & stream decrypt for Option B (User-Managed) curl -X GET "https://api.sarchive.saltycat.tw/api/v1/SuperArchive/download/TX_ID_HERE" \ -H "X-Encryption-Key: your_secure_passphrase" \ --output "decrypted_file.pdf"
Allows anyone โ not just the uploader โ to independently verify that archived content is authentic and unchanged. This endpoint re-fetches the content directly from the Arweave network and recomputes its SHA-256 hash on every call; it never simply trusts the database. verified: true is only ever returned when the database record exists, the on-chain data is retrievable, the recomputed hash matches, and an archive timestamp exists.
curl -X GET "https://api.sarchive.saltycat.tw/api/v1/verify/TX_ID_HERE"
{
"verified": true,
"archive_id": "PRG-nUoKkh-tumHe2pyJSTnrfaAuiWHsanZd7XUDOH4",
"arweave_tx_id": "PRG-nUoKkh-tumHe2pyJSTnrfaAuiWHsanZd7XUDOH4",
"arweave_url": "https://arweave.net/PRG-nUoKkh-tumHe2pyJSTnrfaAuiWHsanZd7XUDOH4",
"sha256": "5ef8433ee79975c72679dd441eb042f114ad4e6664f1efd8ebfb510a6b4de74c",
"sha256_match": true,
"archive_timestamp": "2026-07-14T10:00:00Z",
"status": "permanent",
"filename": "contract.pdf",
"content_type": "application/pdf",
"file_size": 123456,
"metadata": { "title": "Q3 Vendor Contract", "tags": ["legal", "contract"], "...": "..." },
"checks": {
"record_exists": true,
"arweave_data_retrievable": true,
"content_hash_match": true,
"timestamp_exists": true
}
}
status may also be pending (submitted but not yet mined/propagated โ typically resolves within ~10-20 minutes) or mismatch (the on-chain content no longer matches the recorded hash).
Returns the permanent proof information together with the structured, AI-ready metadata recorded for an archive (title, description, source URL, language, tags). This is metadata-only โ no summarization, embeddings, or LLM processing is performed.
curl -X GET "https://api.sarchive.saltycat.tw/api/v1/archive/TX_ID_HERE"
{
"archive_id": "PRG-nUoKkh-tumHe2pyJSTnrfaAuiWHsanZd7XUDOH4",
"arweave_tx_id": "PRG-nUoKkh-tumHe2pyJSTnrfaAuiWHsanZd7XUDOH4",
"arweave_url": "https://arweave.net/PRG-nUoKkh-tumHe2pyJSTnrfaAuiWHsanZd7XUDOH4",
"sha256": "5ef8433ee79975c72679dd441eb042f114ad4e6664f1efd8ebfb510a6b4de74c",
"file_size": 123456,
"content_type": "application/pdf",
"created_at": "2026-07-14T10:00:00Z",
"status": "permanent",
"metadata": {
"title": "Q3 Vendor Contract",
"description": null,
"source_url": null,
"language": null,
"content_type": "application/pdf",
"tags": ["legal", "contract"],
"created_at": "2026-07-14T10:00:00Z"
}
}
These paths are reserved for upcoming AI-derived views of archived content โ clean Markdown conversion, AI-generated summaries, and named-entity extraction โ so the API surface is stable for integrators building ahead of time. They currently return 501 Not Implemented (or 404 if the archive_id itself doesn't exist).
{
"detail": "AI summarization is not implemented yet. This endpoint is reserved for future AI-ready content processing."
}
Query the remaining unspent S-Points balance in the ledger linked to your developer account.
import requests
url = "https://api.sarchive.saltycat.tw/api/v1/developer/points"
headers = {"Authorization": "Bearer sa_live_YOUR_API_KEY"}
response = requests.get(url, headers=headers)
print(response.json()) # Output: {"email": "user@gmail.com", "remaining_s_points": 405, "status": "active"}
Query a comprehensive registry list of all permanent files uploaded by this user, including archive_id, sha256, original sizes, metadata tags, encryption status, and transaction timestamps.
curl -X GET "https://api.sarchive.saltycat.tw/api/v1/developer/files" \ -H "Authorization: Bearer sa_live_YOUR_API_KEY"
Query all non-deleted developer API keys belonging to your account alongside their active status, preview strings, last-used telemetry, and the cumulative S-Point spending attributed to each specific key.
import requests
url = "https://api.sarchive.saltycat.tw/api/v1/developer/keys"
headers = {"Authorization": "Bearer sa_live_YOUR_API_KEY"}
response = requests.get(url, headers=headers)
print(response.json())
Query and retrieve the secure server-managed AES-256-GCM decryption key and salt (Option C) for a given transaction ID. Enforces ownership: only the uploader can request their files keys.
curl -X GET "https://api.sarchive.saltycat.tw/api/v1/developer/files/TX_ID_HERE/key" \ -H "Authorization: Bearer sa_live_YOUR_API_KEY"