Skip to main content

SCT Python SDK

Python client library for the SCT (Secure Compact Tokenization) API. Pseudonymize, de-pseudonymize, detect PII, compress bulky output, and optimize LLM tokens with a single import — sync (SCTClient) or async (AsyncSCTClient).

Installation

pip install sct-client

Quick Start

from sct_client import SCTClient

with SCTClient(api_key="sct_YOUR_API_KEY") as sct:
    # Pseudonymize a JSON record
    result = sct.pseudonymize(
        '{"name": "Max Mustermann", "email": "max@example.com"}',
        format="json",
        auto_detect_pii=True,
    )
    print(result.pseudonymized_data)
    print(f"Processed {result.record_count} records in {result.duration_ms}ms")

Pseudonymize and De-pseudonymize

from sct_client import SCTClient

sct = SCTClient(api_key="sct_YOUR_API_KEY")

# Pseudonymize with specific fields
result = sct.pseudonymize(
    '{"name": "Erika Musterfrau", "age": 42, "email": "erika@example.com"}',
    format="json",
    encryption_method="aes-256-gcm",
    fields=["name", "email"],
)

# Reverse the pseudonymization
original = sct.de_pseudonymize(
    result.pseudonymized_data,
    encryption_key="YOUR_ENCRYPTION_KEY",
    format="json",
)
print(original.original_data)

sct.close()

PII Detection

with SCTClient(api_key="sct_YOUR_API_KEY") as sct:
    result = sct.detect_pii(
        "Bitte kontaktieren Sie Max Mustermann unter max@example.com oder 0171-1234567."
    )
    for entity in result.entities:
        print(f"  {entity['entity_type']}: {entity['value']}")

Token Optimization

Reduce LLM token usage while preserving meaning:

import os

with SCTClient(api_key=os.environ["SCT_API_KEY"]) as sct:
    result = sct.optimize_tokens(
        "This is a long document that could be compressed for LLM processing...",
        model="gpt-4o",
        aggressive_fillers=True,  # opt-in extra filler-word removal
    )
    print(f"Tokens: {result.original_tokens} -> {result.optimized_tokens}")
    print(f"Reduction: {result.reduction_pct:.1%}")

    # Just count tokens without optimizing
    count = sct.count_tokens("How many tokens is this?", model="claude-3")
    print(f"Token count: {count.token_count}")

Output Compression

Compress bulky tool/observation output (test runners, linters, diffs, grep, …) before it hits an LLM. The engine picks a structured parser, a noise-strip filter, or the prose optimizer, and is guaranteed never to cost more tokens than the raw input. compress_output() is an alias of compress().

import os

with SCTClient(api_key=os.environ["SCT_API_KEY"]) as sct:
    result = sct.compress(
        raw_pytest_output,
        format="pytest",      # omit to let the engine sniff the format
        model="gpt-4o",
        verbosity="compact",  # compact | verbose | ultra
    )
    print(result.compressed)
    print(f"Saved {result.tokens_saved} tokens ({result.savings_pct}%)")
    print(f"tier={result.tier} format_used={result.format_used}")

Async

AsyncSCTClient mirrors the full sync surface (built on httpx.AsyncClient) for LangChain ainvoke/abatch and other async paths:

import os

from sct_client import AsyncSCTClient

async with AsyncSCTClient(api_key=os.environ["SCT_API_KEY"]) as sct:
    ps = await sct.pseudonymize('{"name": "Max"}', auto_detect_pii=True)
    comp = await sct.compress(bulky_text, format="jest")
    original = await sct.de_pseudonymize(ps.pseudonymized_data, ps.encryption_key)

End-to-End Encrypted Streaming

For large datasets, use streaming sessions with client-side encryption:

with SCTClient(api_key="sct_YOUR_API_KEY") as sct:
    # Single-request E2E processing
    result = sct.stream_e2e(
        kek="YOUR_KEK",
        envelope={
            "wrapped_dek": "...",
            "ciphertext": "...",
            "nonce": "...",
        },
        mode="pseudonymize",
        throughput_tier="real_time",
    )

    # Multi-chunk session
    session = sct.create_session(kek="YOUR_KEK", mode="pseudonymize")

    sct.send_chunk(session.session_id, index=0, envelope={...})
    sct.send_chunk(session.session_id, index=1, envelope={...}, is_last=True)

    audit = sct.get_session_audit(session.session_id)
    sct.close_session(session.session_id)

Error Handling

The SDK raises typed exceptions for every error category:

from sct_client import SCTClient
from sct_client.exceptions import (
    SCTAuthenticationError,
    SCTRateLimitError,
    SCTValidationError,
)

with SCTClient(api_key="sct_YOUR_API_KEY") as sct:
    try:
        result = sct.pseudonymize("")
    except SCTValidationError as exc:
        print(f"Invalid request: {exc} — details: {exc.details}")
    except SCTAuthenticationError:
        print("Check your API key")
    except SCTRateLimitError as exc:
        print(f"Slow down — retry after {exc.retry_after}s")

Configuration

Parameter Default Description
api_key (required) Your SCT API key (sct_...)
base_url https://sct.simosphereai.com/api/v1 API base URL
timeout 30.0 Request timeout in seconds

Encryption Methods

Method Description
aes-256-gcm AES-256 in GCM mode (default, recommended)
fpe-ff1 Format-Preserving Encryption (FF1)

License

MIT

Metadata

Release files for sct-client 2.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sct-client 2.2.0
File Size Uploaded
sct_client-2.2.0.tar.gz 11.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sct-client 2.2.0
File Interpreter ABI Platform
sct_client-2.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 24.7 kB

Release files / sct_client-2.2.0.tar.gz

Download URL sct_client-2.2.0.tar.gz
Size 11.6 kB
Tags Source
SHA-256 checksum
How to use checksums
1740f03559bc3ff26adc31c5ebbec7885a99370114e03073a2c6a0d15dac9f17
BLAKE2b-256 checksum
How to use checksums
6e54f1072c7ea08c24efdf800899ac1ebac3d8a4368328a93c7c5879b814e605
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.6

Release files / sct_client-2.2.0-py3-none-any.whl

Download URL sct_client-2.2.0-py3-none-any.whl
Size 13.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
90ccfb3443bf7068f92d2559639acca066d075bc90edc1e9d652fb16f949effd
BLAKE2b-256 checksum
How to use checksums
5d147d8ab4fe357e916647d23d9ab7bdc0d572324ecec5546ef82d911a43d4dc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.6

Release history Release notifications | RSS feed

This release

2.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page