Skip to main content
Your SDK is installed and the client is up. This is the call itself — what you pass, what you get, and what can go wrong. Services sit on the client in PascalCase. Operations either sit directly on the service or nest under a resource, following the provider’s own grouping — your package’s README.md lists the exact paths for the operations you selected. Python puts both clients on the same object: sdk.Linear is synchronous, sdk.AsyncLinear is not. Resources and methods are snake_case.
Every call returns an envelope — { ok, status, data, error } — never the raw payload. Check ok before touching data: if ok is false, the provider still responded, just with an error, so data will be null and error holds what they actually said.

Two kinds of failure

ok: false means the provider replied and said no. Anything that stopped the call reaching that point is thrown instead, already typed: So a real call site branches on ok and catches around it:
ReconnectRequiredError is the one worth handling deliberately. It means a specific end user’s consent lapsed — not that your SDK token is bad. Start a replacement with sdk.auth.startConnectSession, and do not infer it from a bare 401.

Per-call options

Anything about this call rather than the SDK goes in a fused block: which end user to act as, which auth scheme to pick when a service declares several, and a page ceiling.
maxPages must sit strictly below the effective service policy — equality is rejected. You still get one aggregated result from one execution, so do not build a second page loop around it.

Streaming operations

An operation the provider streams comes back as an async iterable on data, inside the same envelope.
Stopping iteration cancels the underlying call. Bound long streams with streamIdleTimeoutMs and maxStreamDurationMs on the client.

Read the receipts

Every execution leaves a canonical receipt, whichever route made it.
The JSON page carries receipt and trace IDs, provider status, total and provider-side latency, attempt counts, and failure classification. Narrow it with --status, --start, --end, --limit, and --offset. sdk activity needs both app.read and audit.read. Use it rather than querying Engine GraphQL directly.

Calling it another way

Test from the CLI

sdk invoke for a smoke test or a CI gate — not for application code.

Call over REST

One HTTP endpoint, for languages with no generated package.

Call a unified operation

One call across several services, with targets and per-service selectors.