Official Python SDK for the 1Claw secrets management platform.
pip install oneclawfrom oneclaw import create_client
# Agent keys (ocv_) auto-exchange for JWTs and refresh before expiry
client = create_client(api_key="ocv_your_agent_key")
# Agent ID is auto-discovered from the token exchange
print(client.resolved_agent_id)from oneclaw import create_client
# User API key (1ck_) — auto-exchanges for JWT
client = create_client(api_key="1ck_your_user_key")
# Or login with email/password
client = create_client()
client.auth.login("user@example.com", "password")client = create_client(token="eyJ...")# Create a vault
resp = client.vaults.create("my-vault", description="Production secrets")
vault_id = resp.data["id"]
# List vaults
vaults = client.vaults.list()
for v in vaults.data["vaults"]:
print(v["name"])# Store a secret
client.secrets.set(vault_id, "api-key", "sk-secret-value")
# Retrieve a secret
secret = client.secrets.get(vault_id, "api-key")
print(secret.data["value"])
# Server-side rotation (vault generates a random value)
client.secrets.rotate_generate(vault_id, "api-key", length=64, charset="base64")
# List versions
versions = client.secrets.list_versions(vault_id, "api-key")# Register an agent
resp = client.agents.create("my-agent", description="CI/CD bot")
agent = resp.data["agent"]
api_key = resp.data["api_key"] # Save this — shown only once
# Self-enroll (no auth required)
client.agents.enroll("my-agent", "admin@example.com")# Grant an agent read access to secrets matching a pattern
client.policies.create(
vault_id,
principal_type="agent",
principal_id=agent_id,
secret_path_pattern="production/*",
permissions=["read"],
)# Submit a transaction
resp = client.agents.submit_transaction(
agent_id,
chain="ethereum",
to="0x...",
value="1000000000000000", # wei
max_fee_per_gas="30000000000",
max_priority_fee_per_gas="1000000000",
)
print(resp.data["tx_hash"])
# Unified signing (personal_sign, typed_data, transaction)
resp = client.agents.sign_intent(
agent_id,
intent_type="personal_sign",
chain="ethereum",
message="0x48656c6c6f",
)
print(resp.data["signature"])# Provision a signing key
client.signing_keys.create(agent_id, "ethereum")
# List keys
keys = client.signing_keys.list(agent_id)
# Check balance
balance = client.signing_keys.balance(agent_id, "ethereum")# Create a treasury
client.treasury.create("Team Treasury", safe_address="0x...", chain="ethereum")
# Create a multisig proposal
client.treasury.propose(treasury_id, chain="ethereum", to="0x...", value="1000000000")
# Sign a proposal
client.treasury.sign_proposal(treasury_id, proposal_id, signature="0x...", decision="approve")# Generate wallets for all supported chains
client.treasury_wallets.generate()
# Check balance
balance = client.treasury_wallets.balance("ethereum")
# Send tokens (requires password re-auth)
client.treasury_wallets.send(
"ethereum",
to="0x...",
value="1000000000000000",
password="your-account-password",
)# Register a platform app
resp = client.platform.create_app("My App", "my-app")
plt_key = resp.data["api_key"] # Save this
# Provision a user
conn = client.platform.upsert_user(email="user@example.com")
# Bootstrap resources from a template
bootstrap = client.platform.bootstrap_user(conn.data["connection_id"])client.webhooks.create(
url="https://example.com/webhook",
events=["agent.transaction.broadcast", "proposal.executed"],
secret="whsec_...",
)# List risk events
events = client.risk.list_events(severity="high")
# Register a honeytoken
client.risk.create_honeytoken(vault_id, "canary/secret-key")client = create_client(api_key="ocv_...", dpop=True)approvals = client.approvals.list(status="pending")
client.approvals.decide(approval_id, "approved")client.auth.send_email_otp("user@example.com")
resp = client.auth.verify_email_otp("user@example.com", "123456")
client.auth.social_login(provider="google", id_token="...")Note: For the full v0.34 API surface (including spend policies, deposit destinations, fiat ramps, internal accounts, and more), see the TypeScript SDK and the OpenAPI spec.
from oneclaw import create_client, OneclawError, AuthError, NotFoundError
client = create_client(api_key="ocv_...")
# Envelope-style (no exceptions)
resp = client.vaults.get("nonexistent-id")
if resp.error:
print(f"Error: {resp.error.message}")
# Exception-style (use the underlying HTTP client)
try:
data = client._http.request_or_throw("GET", "/v1/vaults/bad-id")
except NotFoundError:
print("Vault not found")
except AuthError:
print("Authentication failed")
except OneclawError as e:
print(f"API error: {e} (status={e.status})")with create_client(api_key="ocv_...") as client:
vaults = client.vaults.list()
# Connection pool is automatically closed| Parameter | Default | Description |
|---|---|---|
base_url |
https://api.1claw.xyz |
API base URL |
token |
None |
Pre-existing JWT |
api_key |
None |
ocv_ (agent) or 1ck_ (user) key |
agent_id |
None |
Agent UUID (optional, auto-discovered) |
timeout |
30.0 |
HTTP timeout in seconds |
- Python 3.9+
- httpx (only runtime dependency)
MIT