Metadata-Version: 2.5
Name: seams-sdk
Version: 0.1.0a0
Summary: The typed Python client for the seams control plane, generated from its OpenAPI document.
Project-URL: Homepage, https://ourseams.com
License-Expression: MIT
License-File: LICENSE
Requires-Python: >=3.10
Requires-Dist: httpx>=0.27
Requires-Dist: pydantic>=2.7
Description-Content-Type: text/markdown

# seams

The typed Python client for the seams control plane. **Generated from the OpenAPI document**, which is
emitted from the API's route table — so it cannot describe a shape the API does not serve, and it stays
in step with `@seams/sdk`.

```python
import os
from seams import Seams

seams = Seams(api_key=os.environ["SEAMS_SECRET_KEY"])

seams.users.create("alice", models.CreateEndUserRequest(email="alice@firm.com"))
key = seams.keys.mint(models.MintKeyRequest(end_user_id="alice", bundle="pro"))
print(key.key)
```

## One namespace per CLI command group

`operationId` carries the CLI's own verb, so the method reads like the command:

```text
seams models add smart …        →  seams.models.add("smart", …)
seams bundles price pro fast …  →  seams.bundles.price("pro", …)
seams outcomes runs             →  seams.outcomes.runs()
seams usage --by model          →  seams.usage(by="model")
```

Top-level commands stay top-level: `usage`, `margin`, `audit`, `doctor`, `capabilities`. Routes the API
serves but does not offer a client carry `x-seams-internal: true` and get no method.

## Sync and async

`Seams` and `AsyncSeams` are generated from the same document and carry the same 76 methods.

## Two runtime dependencies

`httpx` for the transport and `pydantic` for the models. Field names are Python's — `end_users`, not
`endUsers` — with the wire name kept as an alias.

## Regenerating

```bash
uv run python scripts/generate.py   # models and facade
```

`src/seams/_generated/` is written by the generator. Do not edit it. The document it reads,
`../openapi.json`, is emitted by [the TypeScript client](../typescript) from the API's route table.
