Metadata-Version: 2.4
Name: tippiti
Version: 1.0.1
Summary: Official Python client for the Tippiti API – the transcription and dictation platform for physicians, attorneys, forensic examiners and professional typing services.
Project-URL: Homepage, https://tippiti.io
Project-URL: Documentation, https://apidocs.tippiti.io
Project-URL: Repository, https://github.com/tippiti/tippiti-python
Project-URL: Issues, https://github.com/tippiti/tippiti-python/issues
Project-URL: Changelog, https://github.com/tippiti/tippiti-python/blob/main/CHANGELOG.md
Author-email: Tippiti <support@tippiti.io>
License: MIT License
        
        Copyright (c) 2026 Tippiti
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
License-File: LICENSE
Keywords: api-client,dictation,legal-transcription,medical-transcription,openapi,tippiti,transcription
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Healthcare Industry
Classifier: Intended Audience :: Legal Industry
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Office/Business
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Requires-Dist: attrs>=24.1
Requires-Dist: httpx<0.29,>=0.27
Requires-Dist: python-dateutil>=2.9
Provides-Extra: dev
Requires-Dist: openapi-python-client>=0.21; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Description-Content-Type: text/markdown

# Tippiti Python Client

Official Python client for the [Tippiti](https://tippiti.io) API – the transcription and dictation platform for physicians, attorneys, forensic examiners and professional typing services.

- **Interactive API docs:** [apidocs.tippiti.io](https://apidocs.tippiti.io)
- **OpenAPI specification:** [tippiti/openapi](https://github.com/tippiti/openapi)
- **Platform:** [tippiti.io](https://tippiti.io)
- **Support:** [app.tippiti.io/support/create](https://app.tippiti.io/support/create)

## Installation

```bash
pip install tippiti
```

Requires Python 3.10 or newer. Built on [httpx](https://www.python-httpx.org/) with type-annotated request and response models.

## Quick start

```python
import os

from tippiti import Tippiti
from tippiti.generated.api.dictation import dictation_index
from tippiti.generated.models.dictation_index_response_200 import (
    DictationIndexResponse200,
)

client = Tippiti.create(token=os.environ["TIPPITI_TOKEN"])

result = dictation_index.sync(client=client, include_notes=True)

if isinstance(result, DictationIndexResponse200):
    for dictation in result.data:
        print(dictation.id, dictation.title)
```

The `.sync()` helper returns the parsed payload directly; its return type is a union of all documented response models (`DictationIndexResponse200`, `DictationIndexResponse401`, `DictationIndexResponse422`, …). Narrow with `isinstance()` before touching model-specific fields, or use `.sync_detailed()` if you need the raw response (status code, headers, unparsed body). Every endpoint, parameter, and response is typed, derived directly from the OpenAPI specification at [apidocs.tippiti.io](https://apidocs.tippiti.io).

### Async variants

Every endpoint also ships an `asyncio` variant. Swap `.sync(...)` for `.asyncio(...)` (or `.sync_detailed(...)` for `.asyncio_detailed(...)`):

```python
import asyncio

async def main() -> None:
    result = await dictation_index.asyncio(client=client, include_notes=True)
    if isinstance(result, DictationIndexResponse200):
        for dictation in result.data:
            print(dictation.id, dictation.title)

asyncio.run(main())
```

## Authentication

The client sends your token as a `Bearer` credential in the `Authorization` header. Tokens are scoped to the issuing user's permissions (main user or sub-user with the relevant capabilities) and can be created in the account settings.

## Resource IDs

All resource identifiers are sqid-encoded strings prefixed with `aid-`, for example `aid-xyz12345`. Model fields reflect this – IDs are typed `str`, never `int`:

```python
from tippiti.generated.api.dictation import dictation_show

response = dictation_show.sync_detailed(client=client, dictation="aid-xyz12345")
```

Raw integer IDs are rejected with a `404` response.

## Available API modules

After installation, every API group has a dedicated module under `tippiti.generated.api.*`:

```python
from tippiti.generated.api.dictation import dictation_index, dictation_show, dictation_store
from tippiti.generated.api.folder import folder_index, folder_store
from tippiti.generated.api.account import account_show, account_update
from tippiti.generated.api.instruction_set import instruction_set_index
from tippiti.generated.api.sub_user import sub_user_index
# ...
```

Module and function names follow the tags and operationIds from the specification. See [apidocs.tippiti.io](https://apidocs.tippiti.io) for the full operation list.

## Response envelope

`.sync()` / `.asyncio()` return a typed dataclass exposing `success` and either `data` (success) or `message` / `errors` (failure). `.sync_detailed()` / `.asyncio_detailed()` wrap that payload in a `Response` object whose `.parsed` attribute is typed as a union of all possible status-code responses – use `response.status_code` to pick the right branch. Validation failures return `422` with per-field error messages. Rate-limit breaches return `429` with a `Retry-After` header.

## Custom base URL

```python
client = Tippiti.create(
    token="...",
    base_url="https://staging.app.tippiti.io/api",
)
```

## Custom httpx configuration

Pass any keyword argument to `Tippiti.create(...)` and it is forwarded to the underlying httpx client – for example `timeout`, `proxy`, or TLS settings:

```python
client = Tippiti.create(
    token="...",
    timeout=30.0,
    follow_redirects=True,
)
```

## Regenerating the client

```bash
pip install -e ".[dev]"
./scripts/generate.sh
```

Fetches the latest specification from `https://apidocs.tippiti.io/api.json` and regenerates `tippiti/generated/`. The generated directory is committed; regeneration runs on a daily schedule and before every release.

Override the spec URL:

```bash
TIPPITI_OPENAPI_URL=http://localhost:8000/api.json ./scripts/generate.sh
```

## Versioning

This client follows [Semantic Versioning](https://semver.org). A release note in [CHANGELOG.md](CHANGELOG.md) accompanies every version. Breaking changes to the underlying API produce a major version bump of this package.

## License

[MIT](LICENSE). The Tippiti platform, trademarks and data are not covered by this license.
