Metadata-Version: 2.4
Name: vertodigital
Version: 0.1.0
Summary: Python client for VertoDigital's public agent API.
Author-email: VertoDigital <team@vertodigital.com>
License-Expression: MIT
Project-URL: Homepage, https://vertodigital.com
Project-URL: Documentation, https://vertodigital.com/developers
Project-URL: Changelog, https://pypi.org/project/vertodigital/#history
Keywords: vertodigital,api,sdk,agent,mcp
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Typing :: Typed
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Dynamic: license-file

# vertodigital

Official Python client for [VertoDigital's public agent API](https://vertodigital.com/developers). Every endpoint is anonymous, so there's no API key to set up. No runtime dependencies, just the Python standard library.

## Install

```
pip install vertodigital
```

## Usage

```python
from vertodigital import Client

client = Client()

client.health()
# {'status': 'ok', 'service': 'vertodigital-agent-api', ...}

# One page of case studies
page = client.case_studies(limit=10)
for cs in page["items"]:
    print(f'{cs["name"]}: {cs["stat"]}')

# Or every case study, paginated for you
urls = [cs["url"] for cs in client.iter_case_studies()]

# Any page on vertodigital.com as markdown
print(client.page("about"))
print(client.llms_txt())

# The OpenAPI 3.1 spec
list(client.openapi()["paths"])

# Submit a contact enquiry on behalf of a user
client.contact(
    from_name="Ada Lovelace",
    from_email="ada@example.com",
    organization="Analytical Engines Ltd",
    topic="services",  # assessment, services, partnership, press, careers, general
    message="We'd like to discuss a marketing analytics engagement.",
)
```

`contact` sends an `Idempotency-Key` automatically. If you retry after a timeout, pass the same `idempotency_key=` again so the enquiry is only recorded once.

Requests go to the pinned `/agent/v1/*` paths by default. Pass `api_version=None` to use the unversioned `/agent/*` paths.

## Errors

- `vertodigital.APIError` for any non-2xx response. It carries `status` and `body`.
- `vertodigital.RateLimitError` (a subclass) on 429. It adds `retry_after` in seconds.
- `vertodigital.ValidationError` when input fails validation before a request is sent.

All three inherit from `vertodigital.VertoDigitalError`. Rate limits and the full API reference are at [vertodigital.com/developers](https://vertodigital.com/developers).

## Changelog

- **0.1.0** - First release: `health`, `case_studies` / `iter_case_studies`, `contact`, `openapi`, `llms_txt`, `page`.

## Publishing (maintainers)

From this directory:

```
python3 -m pip install --upgrade build twine
python3 -m build
python3 -m twine upload dist/*
```

Bump `__version__` in `src/vertodigital/_version.py` and add a changelog entry on every release. Upload with a PyPI API token (username `__token__`).
