Installation & Quick Start¶
Beta Release
Version 0.14.1, the latest release, is a beta release. All core features are functional and tested, but APIs may evolve before the 1.0 stable release.
Requirements¶
- Python 3.11 or higher (tested on 3.11, 3.12, 3.13, 3.14)
- pip
Installation¶
Access required
The SDK source is distributed under access control. The release download and git clone below resolve only for accounts that have been granted access — if yours has not, they will return "not found" rather than a permission error. Contact your Authentic8 account team to request access. Installation from PyPI is planned and will not require it.
# Download and extract the latest release
wget https://github.com/salesengr/silo-sdk-python/archive/refs/tags/v0.14.1.zip
unzip v0.14.1.zip
cd silo-sdk-python-0.14.1
# Create a virtual environment
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Install the SDK
pip install -e .
Optional Extras¶
| Extra | What it adds | When to use |
|---|---|---|
[decrypt] |
cryptography>=46.0.5 |
Decrypt Standard-encrypted Silo logs (EC + AES-GCM) |
[legacy-decrypt] |
cryptography + seccure |
Also decrypt legacy seccure/secp256r1 logs |
[mcp-server] |
mcp + FastAPI + uvicorn |
Run the MCP server for AI integration |
[docs] |
MkDocs + Material | Build this documentation site locally |
pip install -e ".[decrypt]"
pip install -e ".[legacy-decrypt]"
pip install -e ".[mcp-server]"
pip install -e ".[docs]"
Verify Installation¶
Setup Your API Tokens¶
Before running code, configure your API tokens. See Authentication for details on token types.
Create a .env file in your project directory:
# .env — never commit this file
A8_ADMIN_TOKEN=your-admin-token-here
A8_SYNC_TOKEN=your-sync-token-here
A8_FILE_TOKEN=your-file-token-here
A8_LOG_TOKEN=your-log-token-here
A8_SCRAPE_TOKEN=your-scrape-token-here
Copy config/default.json from the SDK to your project and load it:
Your First API Call¶
Browsing Isolation¶
Create a Silo browsing context and get a launch URL:
from silo_sdk import BrowsingAPI
browsing = BrowsingAPI(config) # requires ADMIN_TOKEN
# Create a context with a custom policy
context_id = browsing.create_context(
url="https://example.com",
username="user@company.com",
policy=[
{"type": "file_transfer", "params": ["block_all"]},
{"type": "clipboard", "params": ["allow_to_local", "block_to_silo"]},
{"type": "readonly", "params": ["false"]},
],
max_uses=1,
expires=3600,
)
# Build a launch URL for the user
launch_url = browsing.create_ctx_url(context_id)
print(f"Open in browser: {launch_url}")
# Verify the context exists
info = browsing.get_context(context_id)
print(f"Uses: {info.get('use_count', 0)} / {info.get('max_uses')}")
# Clean up
browsing.delete_context(context_id)
More Examples¶
User Management¶
from silo_sdk import UserManagementAPI
users = UserManagementAPI(config) # requires SYNC_TOKEN
# List users in an org
user_list = users.list_users("my_org")
print(f"Found {len(user_list)} users")
# Get a specific user
user = users.get_user("jane.smith@company.com")
print(f"Status: {user.get('status')}")
# Add a new user
result = users.add_user(
org="my_org",
username="new.user@company.com",
email="new.user@company.com",
given_name="New",
surname="User",
)
print(f"Created: {result.get('username')}")
Organization Management¶
from silo_sdk import OrgManagementAPI
orgs = OrgManagementAPI(config) # requires ADMIN_TOKEN
# Get org details
org_info = orgs.get_org("my_org")
print(f"Org: {org_info.get('vanity_url')}")
# Get child orgs
children = orgs.get_org_children("my_org")
print(f"Sub-orgs: {len(children)}")
Log Extraction¶
from silo_sdk import LogExtractionAPI
logs = LogExtractionAPI(config) # requires LOG_TOKEN
# Check available log sequence range
seq_info = logs.get_log_sequence_info("my_org")
start_seq = seq_info.get("min_seq", 0)
print(f"Starting sequence: {start_seq}")
# Extract AUTH logs starting from min_seq
records = logs.extract_logs(
org="my_org",
start_seq=start_seq,
log_types=["AUTH"],
limit=100,
)
print(f"Extracted {len(records)} log entries")
# Export to CSV (uses per-type field schemas)
logs.export_logs_to_file(
org="my_org",
output_path="auth_logs.csv",
log_types=["AUTH"],
output_format="csv",
)
File Storage¶
from silo_sdk import FileAPI
files = FileAPI(config) # requires FILE_TOKEN
# Upload a file
result = files.upload_file(
bucket_id="my-bucket",
file_path="report.pdf",
name="monthly_report.pdf",
)
file_id = result.get("file_id")
print(f"Uploaded: {file_id}")
# Search for it
found = files.find_files(bucket_id="my-bucket", name="monthly_report.pdf")
print(f"Found {len(found)} files")
# Download it
files.download_file(file_id=file_id, output_path="downloaded_report.pdf")
# Delete it
files.delete_file(file_id=file_id)
Web Harvesting¶
from silo_sdk import HarvesterAPI
harvester = HarvesterAPI(config) # requires SCRAPE_TOKEN
# Create a visual harvest task
task_id = harvester.create_harvest_task(
task_type="visual", # valid types: "visual", "asset", "video", "single"
urls=["https://example.com"],
egress_info={"name": "New York, NY"},
dest_path="/screenshots/",
dest_name="example_screenshot",
dest_bucket_id="my-bucket",
)
print(f"Task created: {task_id}")
# Poll until complete
import time
for _ in range(10):
status = harvester.find_harvest_task(task_id)
if status.get("status") in ("done", "error"):
break
time.sleep(5)
print(f"Final status: {status.get('status')}")
Next Steps¶
- Authentication — understand token types and setup
- Configuration — customize your SDK setup
- Wire Protocol — how requests are structured
- API Reference — full method signatures
- How-To Guides — step-by-step task walkthroughs
- Examples — full runnable demo scripts