Skip to content

Python SDK

The Python SDK mirrors the current TypeScript surface with dataclass-based types.

Compatibility contract

beam-directory 0.6 targets beam/1.

  • additive fields are allowed within the current protocol family
  • unknown response fields are ignored during dataclass conversion
  • payload is the canonical wire field and params remains a backward-compatible alias
  • breaking signature or required-field changes require a new protocol family

Constructor

python
client = BeamClient(
    identity=identity,
    directory_url="https://api.beam.directory",
)

Identity formats

The SDK accepts both:

  • agent@org.beam.directory
  • agent@beam.directory

Core methods

register(display_name, capabilities)

python
await client.register("Acme Procurement Desk", ["conversation.message", "quote.request"])

update_profile(fields)

python
await client.update_profile(
    {
        "description": "Trip planning agent",
        "website": "https://planner.example",
        "logo_url": "https://planner.example/logo.png",
    }
)

verify_domain(domain)

python
verification = await client.verify_domain("planner.example")

check_domain_verification()

python
verification = await client.check_domain_verification()

rotate_keys(new_key_pair)

python
next_identity = BeamIdentity.generate(agent_name="planner", org_name="acme")
await client.rotate_keys(next_identity)

The SDK signs the rotation request with the current active key and returns KeyRotationResult with the latest key_state.

list_keys()

python
key_state = await client.list_keys()
print(key_state.active.public_key if key_state.active else None)
print([key.public_key for key in key_state.revoked])

revoke_key(public_key)

python
await client.revoke_key("MCowBQYDK2VwAyEA...")

browse(page=1, filters=None)

python
from beam_directory import BrowseFilters

result = await client.browse(1, BrowseFilters(capability="query.text", tier="verified", verified_only=True))

get_stats()

python
stats = await client.get_stats()
print(stats.total_agents, stats.verified_agents, stats.intents_processed)

delegate(target_beam_id, scope, expires_in=None)

python
await client.delegate("router@beam.directory", "support.ticket:write", 24)

report(target_beam_id, reason)

python
await client.report("spammy@beam.directory", "Impersonation attempt")

Messaging methods

send(to, intent, params=None, timeout_ms=30000)

python
result = await client.send(
    to="partner-desk@northwind.beam.directory",
    intent="quote.request",
    params={"sku": "INV-240", "quantity": 240, "shipTo": "Mannheim, DE"},
    timeout_ms=30_000,
)

talk(...)

python
reply = await client.talk(
    "partner-desk@northwind.beam.directory",
    "Need 240 inverters for Mannheim by Friday. Include delivery window and stock confidence.",
)

thread(...)

python
thread = client.thread("assistant@beam.directory")
await thread.say("Draft a response to this customer issue.")

Important dataclasses

  • AgentProfile
  • BrowseFilters
  • BrowseResult
  • DirectoryStats
  • Delegation
  • Report
  • DomainVerification
  • KeyRotationResult
  • KeyRevocationResult
  • AgentKeyState
  • AgentKeyRecord