Projects
Projects are isolated workspaces (Cloud plan and above, see Pricing). Each project has its own provider allow-list, routing rules, budgets, environments, and API keys. Use them to separate dev/staging/production or different products.
Managing projects
# List
projects = client.projects.list()
# Create
project = client.projects.create(name="My App", slug="my-app", description="Production AI")
# Update
client.projects.update(project["id"], name="My App v2")
# Delete
client.projects.delete(project["id"])
Project-scoped sub-client
Once you have a project ID, use client.project(id) to get a sub-client for all
project-level operations. Unlike the JavaScript SDK's nested namespaces
(proj.connections.add()), the Python client exposes these as flat, prefixed methods:
proj = client.project("proj_abc123")
Connections (project provider allow-list)
Restricts which providers this project's requests may use. There's no API key here, just a
provider_id and an optional model subset. This is a different concept from the org-level
client.providers namespace (see Providers), which is where you actually
connect your own key (BYOK); a project's allow-list applies on top of whatever providers your
org already has access to, whether platform-connected or BYOK. See
JavaScript: Connections
for the full explanation.
# Restrict this project to a platform-connected provider (+ optionally a model subset)
proj.add_connection("openai", enabled=True, allowed_models=["gpt-4o-mini"])
# List this project's allow-list
connections = proj.list_connections()
# Toggle
proj.disable_connection("openai")
proj.enable_connection("openai")
# Remove the restriction
proj.remove_connection("openai")
Project routing
Covers strategy, provider order/affinity, aliases, and regions only. The governance
policy block (blocked providers, cost/latency ceilings, fallback_behavior, etc.) is
org-level only and has no project override today:
proj.set_routing_config(strategy="cheapest")
# Per-project model aliases
proj.set_aliases({"smart": "gpt-4o-mini"})
proj.delete_alias("smart")
Policy
policy = proj.get_policy()
proj.set_policy(max_tokens_per_request=4096, allowed_models=["gpt-4o", "gpt-4o-mini"])
Budget
proj.set_budget(monthly_usd=500, alert_pct=80, hard_limit=True)
budget = proj.get_budget()
print(budget["spentUsd"], budget["monthlyUsd"])
Environments
environments = proj.list_environments()
env = proj.create_environment("Staging", slug="staging", is_production=False)
proj.delete_environment(env["id"])