Documentation
Python SDK
Use Authlane from Python with typed Result handling and user-scoped local tools.
The Python SDK mirrors the control-plane resources and keeps provider execution in your trusted Python process.
Prerequisites
pip install authlanePython 3.11 or newer is required.
Initialize the client
The client talks to https://app.authlane.io unless you say otherwise, so only a self-hosted
deployment needs base_url.
import os
from authlane import Authlane
with Authlane(
api_key=os.environ["AUTHLANE_API_KEY"],
) as authlane:
result = authlane.services.list()
if result.error is not None:
raise RuntimeError(result.error.code)
assert result.data is not None
services = result.dataConnect an external user
import os
from authlane import Authlane
external_user_id = "user_123" # Derive this from the authenticated server session.
with Authlane(api_key=os.environ["AUTHLANE_API_KEY"]) as authlane:
session_result = authlane.connect_sessions.create(
external_user_id=external_user_id,
allowed_services=[],
allowed_origin="https://app.example.com",
expires_in_seconds=600,
)
if session_result.error is not None:
raise RuntimeError(session_result.error.code)
assert session_result.data is not None
session = session_result.dataallowed_services=[] is a one-time snapshot of every service currently enabled for the tenant.
Load user-scoped tools
import os
from authlane import Authlane
from authlane.adapters import generic
def load_tools(external_user_id: str):
with Authlane(api_key=os.environ["AUTHLANE_API_KEY"]) as authlane:
user = authlane.user(external_user_id)
result = user.tools.list(adapter=generic())
if result.error is not None:
return result
assert result.data is not None
for tool in result.data.values():
print(tool.name)
return result.dataRaw capability definitions expose tool.annotations and the derived tool.risk value (read,
write, or destructive). Use those values to build an approval gate in Agno, LangChain, OpenAI
Agents, or a custom adapter. Tenant read-only policy is already enforced by Authlane before Python
receives the tool list.
Async applications
import os
from authlane import AsyncAuthlane
from authlane.adapters import langchain
async def load_tools(external_user_id: str):
async with AsyncAuthlane(api_key=os.environ["AUTHLANE_API_KEY"]) as authlane:
user = authlane.user(external_user_id)
result = await user.tools.list(adapter=langchain())
if result.error is not None:
return result
assert result.data is not None
return result.dataExpected result
Every expected SDK failure is represented by a Result with either data or error.
Handle errors
Inspect error.code, message, hint, and doc_url. Network, validation, provider, and adapter
failures do not raise through the SDK Result contract.
Security boundary
Bind authlane.user(external_user_id) from a trusted session before choosing an adapter. Each tool
invocation requests a fresh lease and calls the provider directly from Python.
Next step
Use Agno, LangChain, or the generic adapter described in framework adapters.