Skip to main content
synth-ai intentionally exposes separate clients for different runtime domains.
Version requirement This page targets synth-ai>=0.11.0 (the release that includes client.managed_agents and client.horizons_private).

Client split

ClientDomainPath family
client.managed_agentsManaged-agents Anthropic-compatible APIs via backend BFF/api/managed-agents/anthropic/v1/*
client.pools / client.horizons_privateRhodes pools/tasks/rollouts/v1/pools/*, /v1/rollouts/*
client.containersHosted container CRUD/v1/containers/*

Managed-agents quick example

from synth_ai import SynthClient

client = SynthClient(api_key="sk_...")

health = client.managed_agents.health()
print("health:", health)

session = client.managed_agents.create_session(
    {
        "agent": "agent_123",
        "environment_id": "env_123",
        "title": "sdk-demo",
    }
)
session_id = session["id"]

client.managed_agents.post_session_events(
    session_id,
    {
        "events": [
            {
                "type": "user.message",
                "content": [{"type": "text", "text": "write hello world in python"}],
            }
        ]
    },
)

for event in client.managed_agents.stream_session_events(session_id):
    print(event.get("type"))

Common mistakes

  • Using client.pools when you need managed-agents session APIs.
  • Using client.managed_agents when you need rollout artifacts/usage from Rhodes.
  • Mixing endpoint families in one runbook without explicitly naming the target surface.