# Stability Proof Index - Complete Documentation
> Timestamped, verifiable proofs of content creation on the Stability blockchain. Provides bulk JSONL exports, REST-style API, real-time feeds, and comprehensive machine-readable metadata. All data is CC0-1.0 (public domain). Built for AI teams, researchers, and content verification systems.
## Overview
The Stability Proof Index is a blockchain-anchored proof system that provides cryptographic evidence of when content was created. Each proof consists of:
1. **Content Hash** (SHA-256) - The unique identifier of the content
2. **Transaction Hash** - The blockchain transaction that anchored the proof
3. **Timestamp** - When the proof was created (block timestamp)
4. **Creator** - Ethereum address of the creator
5. **Metadata** - Optional descriptive information
**Why this matters:**
- Proves content existed at a specific time without revealing the content itself
- Provides immutable, verifiable timestamps
- Enables training data provenance tracking
- Allows deduplication across datasets
- No gas fees (Stability blockchain is feeless)
**Current Status:**
- Dataset: 2 proofs indexed
- Network: Stability Global Test Network (GTN)
- Update Frequency: Daily (midnight UTC)
- License: CC0-1.0 (Public Domain)
## Quick Integration Examples
### Python - Download & Parse Dataset
```python
import gzip
import json
import requests
# Download latest export
url = "https://www.ouroborus.io/data/proofs-2025-10-28.jsonl.gz"
response = requests.get(url)
with open("proofs.jsonl.gz", "wb") as f:
f.write(response.content)
# Parse JSONL
with gzip.open("proofs.jsonl.gz", "rt") as f:
for line in f:
proof = json.loads(line)
print(f"{proof['sha256_hex']}: {proof['timestamp']}")
```
### Python - Lookup Single Hash
```python
import requests
hash = "0x4dc89b6485c0db11e8389cc67a9e36966d33b0b3472fc3587dea819dd16ee2d9"
url = f"https://www.ouroborus.io/api/v1/resolve/{hash}.json"
response = requests.get(url)
proof = response.json()
if proof["found"]:
print(f"Created: {proof['proof']['timestamp']}")
print(f"TX: {proof['proof']['tx_hash']}")
```
### Bash - Verify Checksum
```bash
# Download dataset and checksum
curl -O https://www.ouroborus.io/data/proofs-2025-10-28.jsonl.gz
curl -O https://www.ouroborus.io/data/proofs-2025-10-28.jsonl.gz.sha256
# Verify integrity
sha256sum -c proofs-2025-10-28.jsonl.gz.sha256
```
### Bash - Monitor for New Proofs
```bash
# Poll feed every 5 minutes
while true; do
curl -s https://www.ouroborus.io/feed.xml | \
grep "
Proof:" | head -1
sleep 300
done
```
## Complete API Reference
### GET /api/v1/index.json
Returns overview of all available endpoints.
**Response:**
```json
{
"name": "Stability Proof Index API",
"version": "1.0",
"base_url": "https://www.ouroborus.io/api/v1",
"endpoints": [...]
}
```
### GET /api/v1/resolve/{hash}.json
Look up a specific content hash.
**Parameters:**
- `hash` (required): SHA-256 hash with 0x prefix
**Response:**
```json
{
"status": "ok",
"found": true,
"proof": {
"sha256_hex": "0x4dc89b...",
"ni_uri": "ni:///sha-256;TcibZIXA...",
"creator_address": "0x6351c3...",
"timestamp": "2025-10-28T16:36:04.000Z",
"tx_hash": "0x5cb0b909...",
"blockchain": "stability",
"network": "testnet",
"explorer_url": "https://stability.blockscout.com/tx/0x5cb0b...",
"permalink": "https://www.ouroborus.io/proof/4dc89b.../",
"metadata": "Created by : Juliun, Type: Text"
}
}
```
### GET /api/v1/manifest/latest.json
Get information about the latest dataset export.
**Response:**
```json
{
"status": "ok",
"latest_export": {
"date": "2025-10-28",
"url": "https://www.ouroborus.io/data/proofs-2025-10-28.jsonl.gz",
"manifest_url": "https://www.ouroborus.io/data/manifest.json",
"proof_count": 2
}
}
```
### GET /api/v1/stats.json
Get dataset statistics.
**Response:**
```json
{
"status": "ok",
"stats": {
"total_proofs": 2,
"unique_creators": 1,
"earliest_proof": "2025-10-28T01:24:06.000Z",
"latest_proof": "2025-10-28T16:36:04.000Z"
}
}
```
## Complete JSONL Schema
Each line in the JSONL export is a JSON object with these fields:
```json
{
"sha256_hex": "string (required)",
"ni_uri": "string (required)",
"creator_did": "string (currently empty)",
"creator_address": "string (required)",
"timestamp": "string ISO 8601 (required)",
"tx_hash": "string (required)",
"permalink": "string URL (required)",
"title": "string (optional)",
"description": "string (optional)",
"metadata": "string (optional)",
"blockchain": "string (always 'stability')",
"network": "string (currently 'testnet')",
"explorer_url": "string URL (required)"
}
```
**Field Descriptions:**
- `sha256_hex`: Content hash in hexadecimal with 0x prefix. Primary identifier.
- `ni_uri`: Named Information URI per RFC 6920. Location-independent identifier.
- `creator_did`: Decentralized Identifier (reserved for future use, currently empty)
- `creator_address`: Ethereum address of the creator (0x...)
- `timestamp`: When the proof was created, in ISO 8601 format
- `tx_hash`: Blockchain transaction hash (0x...)
- `permalink`: Permanent URL to the human-readable proof page
- `title`: Short title or metadata from the transaction
- `description`: Longer description (currently mirrors title)
- `metadata`: Raw metadata string from the blockchain transaction
- `blockchain`: Always "stability"
- `network`: "testnet" or "mainnet"
- `explorer_url`: Link to blockchain explorer for verification
## Web Standards Implemented
### JSON-LD (Schema.org)
Every proof page includes structured data:
```json
{
"@context": "https://schema.org",
"@type": "DigitalDocument",
"@id": "https://www.ouroborus.io/proof/{hash}/",
"name": "Blockchain Proof of Creation: 0x{hash}",
"identifier": [
{"@type": "PropertyValue", "propertyID": "content-hash", "value": "0x..."},
{"@type": "PropertyValue", "propertyID": "ni-uri", "value": "ni:///..."},
{"@type": "PropertyValue", "propertyID": "transaction-hash", "value": "0x..."}
],
"dateCreated": "2025-10-28T16:36:04.000Z",
"creator": {"@type": "Person", "identifier": "0x6351c3..."}
}
```
### Linkset (RFC 9264)
Resource relationships in machine-readable format:
```json
{
"linkset": [{
"anchor": "https://www.ouroborus.io/proof/{hash}/",
"item": [
{
"href": "https://stability.blockscout.com/tx/{tx}",
"type": "text/html",
"rel": "canonical"
},
{
"href": "ni:///sha-256;{base64}",
"type": "application/octet-stream",
"rel": "alternate"
}
]
}]
}
```
### ni: URIs (RFC 6920)
Hash-based permanent identifiers that work even if the domain changes:
```
ni:///sha-256;TcibZIXA2xHoOJzGep42lm0zsLNHL8NYfeqBndFu4tk
```
Can be used for:
- Content-addressable storage
- Distributed systems
- Deduplication
- Verification without relying on DNS
### Sitemaps (Protocol)
Automatic rolling sitemaps that scale to millions of proofs:
- Up to 50,000 URLs per sitemap file
- Automatic sitemap_index.xml generation when needed
- Daily updates
### IndexNow (API)
Push notifications to search engines:
- Bing
- Yahoo
- Yandex
### WebSub (PubSubHubbub)
Real-time feed updates via hub: `https://pubsubhubbub.appspot.com/`
## Verification Process
Every proof can be independently verified:
1. **Get proof data from API:**
```bash
curl https://www.ouroborus.io/api/v1/resolve/{hash}.json
```
2. **Visit blockchain explorer:**
```
https://stability.blockscout.com/tx/{tx_hash}
```
3. **Verify:**
- Transaction exists on blockchain ✓
- Timestamp matches block time ✓
- Content hash is in transaction input data ✓
- Creator address matches ✓
## Dataset Manifest Format
The `/data/manifest.json` file provides complete metadata:
```json
{
"dataset_name": "stability-proofs",
"version": "2025-10-28",
"description": "Daily snapshot of on-chain proofs",
"homepage": "https://www.ouroborus.io",
"files": [
{
"path": "proofs-2025-10-28.jsonl.gz",
"url": "https://www.ouroborus.io/data/proofs-2025-10-28.jsonl.gz",
"sha256": "e601ba136668f7fb73c0bb81751aff1d511971c2ece94efbbb4281ce18d02099",
"rows": 2,
"format": "jsonl",
"compression": "gzip"
}
],
"license": "CC0-1.0",
"contact": "data@ouroborus.io",
"proof_count": 2,
"schema": { /* complete field definitions */ }
}
```
## Use Cases in Detail
### 1. Training Data Provenance
**Problem:** Need to prove when training data was collected.
**Solution:**
```python
# Hash your training dataset
import hashlib
with open("training_data.json", "rb") as f:
content_hash = hashlib.sha256(f.read()).hexdigest()
# Check if it's already proven
response = requests.get(f"https://www.ouroborus.io/api/v1/resolve/0x{content_hash}.json")
if response.json()["found"]:
print("Dataset was first seen:", response.json()["proof"]["timestamp"])
```
### 2. Content Deduplication
**Problem:** Avoid processing duplicate content.
**Solution:**
```python
def is_duplicate(content_bytes):
hash = "0x" + hashlib.sha256(content_bytes).hexdigest()
response = requests.get(f"https://www.ouroborus.io/api/v1/resolve/{hash}.json")
return response.json().get("found", False)
```
### 3. Blockchain Timestamping Service
**Problem:** Need tamper-proof timestamps.
**Solution:** Every proof includes an immutable blockchain timestamp that can be independently verified on-chain.
### 4. Dataset Attribution
**Problem:** Track who created what content and when.
**Solution:** Each proof includes creator address and can be linked to identity systems (DIDs in future).
## Enterprise Features (Contact Required)
- **Bulk Mirrors:** Direct S3/GCS bucket access
- **Pre-computed Embeddings:** CLIP, text embeddings for semantic search
- **Webhooks:** Real-time notifications on new proofs
- **Custom Exports:** Parquet, CSV, or custom formats
- **Private Deployments:** Self-hosted instances
- **SLA Guarantees:** Uptime and support agreements
**Contact:** data@ouroborus.io
## Development Roadmap
### Coming Soon
- Embeddings export (CLIP vectors)
- Hugging Face Dataset integration
- Webhook subscription API
- Historical snapshots
- Mainnet deployment
### Future Considerations
- DID (Decentralized Identifier) integration
- C2PA manifest support
- Perceptual hashing for images
- Content-addressable mirrors
- IPFS pinning
## Technical Architecture
**Storage:** SQLite database → Static JSON files on Vercel CDN
**Update Process:**
1. New proof added via `add-proof.js`
2. Static files generated with `generate-static-enhanced.js`
3. Deployed to Vercel (global CDN)
4. Search engines notified via IndexNow + WebSub
**Why Static:**
- Zero server costs
- Instant global distribution
- No runtime dependencies
- Maximum reliability
## License & Legal
**Dataset License:** CC0-1.0 (Public Domain)
You can:
- Use commercially without restriction
- Modify and redistribute
- Train ML models
- No attribution required (but appreciated)
**Data Accuracy:** All proofs are verifiable on-chain. We make no warranties but provide tools for independent verification.
**Privacy:** Only public blockchain data is indexed (addresses, hashes, timestamps). No PII is collected or stored.
## Links & Resources
### Core Documentation
- [Homepage](https://www.ouroborus.io)
- [Dataset Manifest](https://www.ouroborus.io/data/manifest.json)
- [OpenAPI Spec](https://www.ouroborus.io/openapi.json)
- [Dataset Docs](https://www.ouroborus.io/.well-known/dataset.json)
### Data Access
- [Latest JSONL Export](https://www.ouroborus.io/data/proofs-2025-10-28.jsonl.gz)
- [API Index](https://www.ouroborus.io/api/v1/index.json)
- [Statistics](https://www.ouroborus.io/api/v1/stats.json)
### Real-time
- [Atom Feed](https://www.ouroborus.io/feed.xml)
- [Sitemap](https://www.ouroborus.io/sitemap.xml)
### Examples
- [Example Proof 1](https://www.ouroborus.io/proof/4dc89b6485c0db11e8389cc67a9e36966d33b0b3472fc3587dea819dd16ee2d9/)
- [Example Proof 2](https://www.ouroborus.io/proof/7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069/)
- [Example Linkset](https://www.ouroborus.io/proof/4dc89b6485c0db11e8389cc67a9e36966d33b0b3472fc3587dea819dd16ee2d9/linkset.json)
### Blockchain
- [Stability Blockscout](https://stability.blockscout.com)
- [Example Transaction](https://stability.blockscout.com/tx/0x5cb0b909b6ef95a4d04bba62ec5e6acd605c793e1a3aa2ba002d482cd4fb6ddb)
---
**Last Updated:** 2025-10-28
**Contact:** data@ouroborus.io
**Support:** For questions, bugs, or feature requests