Documentation Index
Fetch the complete documentation index at: https://docs.coval.dev/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The Coval SDKs are generated from the public OpenAPI specs that power this API reference, so the surface area stays in sync with what the API actually accepts. On top of the generated client we ship hand-written ergonomics — auth, retries, pagination, and typed errors — for the calls you make most often.TypeScript
@coval/sdk on npm. Production-grade today: lowercase x-api-key auth, retry-with-backoff, async pagination, typed errors.Python
coval-sdk on PyPI. Demo-grade today — generated urllib3 client without the wrapper layer. Parity with the TypeScript ergonomics is in flight.Both SDKs are MIT-licensed and live in coval-ai/coval-examples. A weekly cron regenerates them from the OpenAPI specs every Monday at 09:00 UTC.
Install
Install from source (bleeding edge)
Install from source (bleeding edge)
If you want to track the very latest spec before a release lands on npm or PyPI, you can install directly from the source repo:
Quick start
CovalClient — coval.agents, coval.conversations, coval.simulations, coval.traces, coval.metrics, and so on (22 resources total). The Python client is split into one *Api class per resource (AgentsApi, ConversationsApi, SimulationsApi, …) constructed against a shared ApiClient.
Auth
The Coval API gateway requires the headerx-api-key — lowercase. Uppercase X-API-Key is rejected with Missing API Key.
Errors
The TypeScript SDK raises typed errors so you can branch on transport vs. API failures:CovalApiError shape — status, code, message, requestId, body, url, method. The requestId is sourced from x-request-id, x-amzn-requestid, or the response body in that order — include it when you file a support ticket.Python: --raw fallback for legacy data
The Python client uses strict pydantic v2 models for every response, including regex patterns on IDs (e.g., agent_id must match ^[A-Za-z0-9]{22}$). If your org has historical data that predates the current spec — say, an agent created back when IDs had a different shape — pydantic will raise a ValidationError mid-stream and you’ll lose the rest of the page.
The fix is to call the *_without_preload_content variant of any method and parse the response yourself:
_without_preload_content sibling. The TypeScript SDK does not have this issue — its types are emitted as interface declarations with no runtime validation, so unknown fields pass through.
Retries
The TypeScript SDK retries with exponential backoff and jitter on transient failures. Defaults:| Setting | Default | Notes |
|---|---|---|
| Max attempts | 3 | Includes the first attempt. |
| Base delay | 200ms | Effective delay = base * 2^(attempt-1) plus jitter. |
| Max delay | 5000ms | Cap on any single backoff. |
| Retryable statuses | 408, 429, 500, 502, 503, 504 | Plus network/transport errors. |
Retry-After | Honored | Numeric seconds or HTTP-date both accepted. |
CovalNetworkError. When a non-retryable status (e.g., 400, 404) comes back, it falls through to the normal error path and raises CovalApiError immediately.
Retry-with-backoff is TypeScript-only today. Python parity is on the roadmap — in the meantime, wrap your own calls with
tenacity or a similar library.Pagination
The Coval v1 API usesnext_page_token-style pagination. The TypeScript SDK ships an async iterator that handles the loop for you:
paginate and collectAll work with any list endpoint — provide fetchPage, items, and nextToken callbacks for the method you’re calling.
The Python SDK does not include a pagination helper yet — it’s on the roadmap. For now, use a while loop on next_page_token — see the list_agents.py example for the shape.
Customization
Base URL
Point the client at staging, a self-hosted gateway, or a regional endpoint:Middleware (TypeScript)
Inject request/response middleware after the auth and error layers — useful for logging, OpenTelemetry spans, or attaching request IDs you control:Custom fetch
Swap the underlyingfetch implementation — for example, to use undici with keepalive in a long-running Node process, or to stub network calls in tests:
Versioning and regeneration
Both SDKs are generated from the same OpenAPI specs that this API reference is built from. On the source repo, a weekly cron regenerates the clients every Monday at 09:00 UTC and opens a PR if the specs have drifted.- Minor version bumps (
0.2.x→0.3.0) reflect spec evolution — new endpoints, new optional fields, additional response shapes. Generally safe to upgrade. - Major version bumps (
0.x→1.0) are reserved for breaking changes in the hand-written wrapper layer (CovalClientoptions, error class shapes, pagination helper signature). The generated surface follows the spec independently.
The TypeScript SDK is production-grade today. The Python SDK is currently demo-grade — the generated client without the wrapper layer. Wrapper parity (retry, pagination, typed errors) is on the roadmap. Until then, the Python
--raw fallback documented above is the workaround for orgs whose data fails strict pydantic validation.Going deeper
Source repo
Full SDK source, examples folder, and the generation scripts. Open issues here.
TypeScript examples
list-agents.ts, submit-conversation.ts — runnable end-to-end samples.Python examples
list_agents.py with --raw fallback pattern for legacy data.OpenAPI specs
The specs that power both SDKs are published at
https://api.coval.dev/v1/openapi.API keys
How to mint and rotate API keys from the dashboard.
CLI
Prefer the shell?
coval-cli covers the same surface area.
