Skip to main content

Backend SDK for torii — verify JWTs, manage users, react to events from your Python server.

Project description

torii-backend

Backend SDK for torii — verify end-user JWTs without a per-request round trip and manage users from your Python server.

v0.x — API may still change.

Setup

  1. Sign in to app.torii.so and from your dashboard copy:

    • your issuer URL (e.g. https://acme.torii.so)
    • a secret key (sk_test_… for development, sk_live_… for production)
  2. Install the SDK:

    pip install torii-backend
    # or, with the FastAPI dependency adapter:
    pip install "torii-backend[fastapi]"
    

    Python 3.9+.

  3. Verify an end-user JWT:

    from torii_backend import verify_token
    
    auth = verify_token(token, issuer="https://acme.torii.so")
    print(auth.user_id, auth.environment_id, auth.email_verified)
    

    The first call fetches the issuer's JWKS; subsequent calls reuse the cache and rotate keys automatically (handled by PyJWT). No round trip per request.

  4. Call the backend REST API:

    import os
    from torii_backend import create_torii_client
    
    torii = create_torii_client(secret_key=os.environ["TORII_SECRET_KEY"])
    user = torii.users.get(user_id)
    

    Default base URL is https://api.torii.so. Override with api_url= for staging or self-hosted.

FastAPI

from fastapi import Depends, FastAPI
from torii_backend.fastapi import require_auth

app = FastAPI()
auth_dep = require_auth(issuer="https://acme.torii.so")

@app.get("/me")
def me(auth = Depends(auth_dep)):
    return {"user_id": auth.user_id}

Backend API

page = torii.users.list(limit=50)
user = torii.users.create(email="x@y.com")
torii.users.ban(user.id)

sessions = torii.sessions.list_for_user(user.id)
torii.sessions.revoke_all_for_user(user.id)

PATCH semantics (users.update)

users.update is a tri-state PATCH: each updatable field can be set, cleared, or left alone. Pass only the kwargs you want on the wire — pydantic v2's model_fields_set tracks which fields were explicitly provided, and the SDK serializes via model_dump(exclude_unset=True) so untouched fields never appear in the request body.

torii.users.update(
    user_id,
    name="Ada",     # → server updates name
    phone=None,     # → server clears phone (sent as JSON null)
    # address not passed → server leaves alone
)

Wire body for the call above:

{ "name": "Ada", "phone": null }
Call Field on wire Server effect
users.update(id, name="Ada") "name": "Ada" update name
users.update(id, phone=None) "phone": null clear phone
users.update(id) (no field kwargs) omitted leave alone

You can also build a request explicitly — useful when assembling the patch dynamically:

from torii_backend import ToriiUpdateUserInput

patch = ToriiUpdateUserInput(name="Ada", phone=None)
torii.users.update(user_id, patch)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

torii_backend-0.0.2.tar.gz (41.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

torii_backend-0.0.2-py3-none-any.whl (50.2 kB view details)

Uploaded Python 3

File details

Details for the file torii_backend-0.0.2.tar.gz.

File metadata

  • Download URL: torii_backend-0.0.2.tar.gz
  • Upload date:
  • Size: 41.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for torii_backend-0.0.2.tar.gz
Algorithm Hash digest
SHA256 033571782c4f6b7d000a6cda0795f49a59113d87a030ea9ddfce074cd4a65506
MD5 910356b433a32e0246bacbea636b9c96
BLAKE2b-256 6b5fca0b6dd9ceee5372ff9fe4ddf1afc70f753d795bf25bb0657c097e4fb687

See more details on using hashes here.

Provenance

The following attestation bundles were made for torii_backend-0.0.2.tar.gz:

Publisher: release.yml on Torii-ApS/torii-sdk-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file torii_backend-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: torii_backend-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 50.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for torii_backend-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b1eee1cdf956e57d3e9eb57d247330ed3b47beb709375deed828ec74826e62af
MD5 2ffebc07969818660b4e2dd31147d7c9
BLAKE2b-256 067c63595fc94a2c9f9c8b20dd749f41e6acd7674aead0f3deabb6d1c89a29c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for torii_backend-0.0.2-py3-none-any.whl:

Publisher: release.yml on Torii-ApS/torii-sdk-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page