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

OptionDefaultDescription
api_keySIGNALSTACK_API_KEY env varYour API key
timeout30Request timeout in seconds
max_retries3Max retries for 429/5xx responses
base_urlhttps://signal-stack-ten.vercel.app/v1API base URL