Python SDK
The SignalStack Python SDK provides a fully typed, async-first client for all verification endpoints. Built on httpx with automatic retry, rate limit handling, and dataclass responses.
Installation
Code
pip install signalstack
# With async support (recommended)
pip install "signalstack[async]"
# With all extras
pip install "signalstack[async,cli]"Client initialization
Code
import signalstack
from signalstack import SignalStack
# Using environment variable
client = SignalStack()
# Explicit API key
client = SignalStack(
api_key="ssk_live_YOUR_API_KEY",
timeout=30,
max_retries=3,
base_url="https://signal-stack-ten.vercel.app/v1",
)
# Async client
import asyncio
from signalstack import AsyncSignalStack
async_client = AsyncSignalStack(api_key="ssk_live_YOUR_API_KEY")Verify a business
Code
result = client.verify.business(
company_name="Acme Corp",
jurisdiction="us_de",
officers=True,
filings=True,
)
print(f"Status: {result.status}") # "active"
print(f"Trust score: {result.trust_score}") # 0.94
print(f"Officers: {result.officers}")
# [
# Officer(name="John Doe", role="CEO", appointed_on=date(2015, 3, 12)),
# Officer(name="Jane Smith", role="CFO", appointed_on=date(2018, 6, 1)),
# ]Analyze a document
Code
from signalstack.types import DocumentSource
result = client.verify.document(
source=DocumentSource.URL,
content="https://example.com/report.pdf",
check_deepfakes=True,
)
print(f"AI probability: {result.ai_generated_probability}") # 0.87
print(f"Flags: {result.manipulation_flags}")
# ["ai_generated_text", "metadata_stripped"]Verify media provenance
Code
result = client.verify.media(
url="https://example.com/photo.jpg",
check_deepfakes=True,
)
print(f"Authenticity: {result.authenticity}") # "manipulated"
print(f"Deepfake score: {result.deepfake_score}") # 0.94
print(f"Provenance: {result.provenance_source}")
# "https://original-source.com/photo.jpg"Verify a claim
Code
result = client.verify.claim(
claim="Water boils at 100°C at sea level",
sources=["web", "wikipedia", "semantic_scholar"],
)
print(f"Verdict: {result.verdict}") # "true"
print(f"Trust score: {result.trust_score}") # 0.97
for evidence in result.evidence:
print(f" [{evidence.source}] {evidence.snippet}")Async usage
Code
import asyncio
from signalstack import AsyncSignalStack
async def main():
client = AsyncSignalStack(api_key="ssk_live_...")
# Run verifications concurrently
biz, claim = await asyncio.gather(
client.verify.business(company_name="Acme Corp"),
client.verify.claim(claim="Paris is the capital of France"),
)
print(f"Business: {biz.trust_score}")
print(f"Claim: {claim.trust_score}")
asyncio.run(main())Error handling
Code
from signalstack.exceptions import (
RateLimitError,
AuthenticationError,
ValidationError,
ServerError,
)
try:
result = client.verify.claim(claim="...")
except RateLimitError as e:
print(f"Rate limited. Retry after {e.retry_after}s")
except AuthenticationError:
print("Check your API key")
except ValidationError as e:
print(f"Validation failed: {e.details}")
except ServerError as e:
print(f"Server error: {e.status_code}")Configuration
| Option | Default | Description |
|---|---|---|
api_key | SIGNALSTACK_API_KEY env var | Your API key |
timeout | 30 | Request timeout in seconds |
max_retries | 3 | Max retries for 429/5xx responses |
base_url | https://signal-stack-ten.vercel.app/v1 | API base URL |