# SDKs

Every API operation by its name in the TypeScript, Python and Go SDKs.

The three SDKs are generated from the same OpenAPI document and name every operation the same way: a resource, then a method. TypeScript keeps the name, Python snake-cases it, Go capitalises it. Install and configure them with the [SDKs guide](https://docs.kaab.ist/guides/sdks).

## Packages

| Language | Package | Client |
|---|---|---|
| TypeScript | `@kaabist/sdk` | `new Kaab()` |
| Python | `kaabist` | `Kaab()` and `AsyncKaab()` |
| Go | `github.com/kaabist/kaab-go/kaab` | `kaab.New("")` |

Every client reads `KAAB_API_KEY` and, when it is set, `KAAB_BASE_URL`.

## Helpers

| What | TypeScript | Python | Go |
|---|---|---|---|
| Wait for a job to end, answering inputs on the way | `kaab.jobs.wait(id, { onInput })` | `kaab.jobs.wait(id, on_input=…)` | `client.Jobs.Wait(ctx, id, kaab.WaitOptions{…})` |
| Iterate every item of a list, page after page | `for await (const job of kaab.jobs.list())` | `for job in kaab.jobs.list()` | `client.Jobs.ListAll(ctx, params)` |
| Verify a webhook delivery | `kaab.webhooks.verify(body, header, secret)` | `kaab.webhooks.verify(body, header, secret)` | `webhooks.Verify(body, header, secret)` |

## Operations

| Operation | TypeScript | Python | Go |
|---|---|---|---|
| [Create a job from a program reference or the url + extract shorthand](https://docs.kaab.ist/reference/api/jobs/create-job) | `kaab.jobs.create()` | `kaab.jobs.create()` | `client.Jobs.Create()` |
| [List jobs, newest first](https://docs.kaab.ist/reference/api/jobs/list-jobs) | `kaab.jobs.list()` | `kaab.jobs.list()` | `client.Jobs.List()` |
| [Create up to 1000 jobs from one program](https://docs.kaab.ist/reference/api/jobs/create-job-batch) | `kaab.jobs.batch()` | `kaab.jobs.batch()` | `client.Jobs.Batch()` |
| [Estimate the credit cost of a job without enqueuing it](https://docs.kaab.ist/reference/api/jobs/estimate-job) | `kaab.jobs.estimate()` | `kaab.jobs.estimate()` | `client.Jobs.Estimate()` |
| [Read the job envelope; `Prefer: wait` long-polls for a state change](https://docs.kaab.ist/reference/api/jobs/get-job) | `kaab.jobs.get()` | `kaab.jobs.get()` | `client.Jobs.Get()` |
| [Per-step records with timings, snapshots and healing information](https://docs.kaab.ist/reference/api/jobs/list-job-steps) | `kaab.jobs.steps()` | `kaab.jobs.steps()` | `client.Jobs.Steps()` |
| [Redirect to a presigned snapshot JSON URL](https://docs.kaab.ist/reference/api/jobs/get-job-snapshot) | `kaab.jobs.snapshot()` | `kaab.jobs.snapshot()` | `client.Jobs.Snapshot()` |
| [Redirect to a presigned screenshot URL](https://docs.kaab.ist/reference/api/jobs/get-job-screenshot) | `kaab.jobs.screenshot()` | `kaab.jobs.screenshot()` | `client.Jobs.Screenshot()` |
| [Redirect to a presigned artifact URL](https://docs.kaab.ist/reference/api/jobs/get-job-artifact) | `kaab.jobs.artifact()` | `kaab.jobs.artifact()` | `client.Jobs.Artifact()` |
| [Supply the value an `await_input` step is waiting for](https://docs.kaab.ist/reference/api/jobs/submit-job-input) | `kaab.jobs.input()` | `kaab.jobs.input()` | `client.Jobs.Input()` |
| [Apply a proposal, skip a step, retry from a checkpoint, continue or abort](https://docs.kaab.ist/reference/api/jobs/resume-job) | `kaab.jobs.resume()` | `kaab.jobs.resume()` | `client.Jobs.Resume()` |
| [Open a live browser session on a parked job](https://docs.kaab.ist/reference/api/jobs/takeover-job) | `kaab.jobs.takeover()` | `kaab.jobs.takeover()` | `client.Jobs.Takeover()` |
| [Cancel a job and release its reserved credits](https://docs.kaab.ist/reference/api/jobs/cancel-job) | `kaab.jobs.cancel()` | `kaab.jobs.cancel()` | `client.Jobs.Cancel()` |
| [Read batch counters](https://docs.kaab.ist/reference/api/batches/get-batch) | `kaab.batches.get()` | `kaab.batches.get()` | `client.Batches.Get()` |
| [List the jobs of a batch](https://docs.kaab.ist/reference/api/batches/list-batch-jobs) | `kaab.batches.jobs()` | `kaab.batches.jobs()` | `client.Batches.Jobs()` |
| [Create a program and its first version](https://docs.kaab.ist/reference/api/programs/create-program) | `kaab.programs.create()` | `kaab.programs.create()` | `client.Programs.Create()` |
| [List programs](https://docs.kaab.ist/reference/api/programs/list-programs) | `kaab.programs.list()` | `kaab.programs.list()` | `client.Programs.List()` |
| [Lint a program definition and return the normalized document](https://docs.kaab.ist/reference/api/programs/lint-program) | `kaab.programs.lint()` | `kaab.programs.lint()` | `client.Programs.Lint()` |
| [Read a program by id or name](https://docs.kaab.ist/reference/api/programs/get-program) | `kaab.programs.get()` | `kaab.programs.get()` | `client.Programs.Get()` |
| [Rename a program or change its description and canary settings](https://docs.kaab.ist/reference/api/programs/update-program) | `kaab.programs.update()` | `kaab.programs.update()` | `client.Programs.Update()` |
| [Soft-delete a program](https://docs.kaab.ist/reference/api/programs/delete-program) | `kaab.programs.delete()` | `kaab.programs.delete()` | `client.Programs.Delete()` |
| [List the versions of a program](https://docs.kaab.ist/reference/api/programs/list-program-versions) | `kaab.programs.versions.list()` | `kaab.programs.versions.list()` | `client.Programs.Versions.List()` |
| [Add a version to a program](https://docs.kaab.ist/reference/api/programs/create-program-version) | `kaab.programs.versions.create()` | `kaab.programs.versions.create()` | `client.Programs.Versions.Create()` |
| [Replace a draft version's definition in place; published versions are immutable](https://docs.kaab.ist/reference/api/programs/update-program-version) | `kaab.programs.versions.update()` | `kaab.programs.versions.update()` | `client.Programs.Versions.Update()` |
| [Delete a draft version (it is archived); published versions are immutable](https://docs.kaab.ist/reference/api/programs/delete-program-version) | `kaab.programs.versions.delete()` | `kaab.programs.versions.delete()` | `client.Programs.Versions.Delete()` |
| [Read one version including its definition](https://docs.kaab.ist/reference/api/programs/get-program-version) | `kaab.programs.versions.get()` | `kaab.programs.versions.get()` | `client.Programs.Versions.Get()` |
| [Publish a draft version and move the `latest` alias](https://docs.kaab.ist/reference/api/programs/publish-program-version) | `kaab.programs.versions.publish()` | `kaab.programs.versions.publish()` | `client.Programs.Versions.Publish()` |
| [RFC 6902 JSON Patch between two versions](https://docs.kaab.ist/reference/api/programs/diff-program-version) | `kaab.programs.versions.diff()` | `kaab.programs.versions.diff()` | `client.Programs.Versions.Diff()` |
| [Run extraction against a stored snapshot without fetching](https://docs.kaab.ist/reference/api/programs/replay-program-version) | `kaab.programs.versions.replay()` | `kaab.programs.versions.replay()` | `client.Programs.Versions.Replay()` |
| [Point an alias at a version](https://docs.kaab.ist/reference/api/programs/set-program-alias) | `kaab.programs.aliases.set()` | `kaab.programs.aliases.set()` | `client.Programs.Aliases.Set()` |
| [Remove an alias](https://docs.kaab.ist/reference/api/programs/delete-program-alias) | `kaab.programs.aliases.delete()` | `kaab.programs.aliases.delete()` | `client.Programs.Aliases.Delete()` |
| [Store a browser storage state as a reusable session](https://docs.kaab.ist/reference/api/sessions/create-session) | `kaab.sessions.create()` | `kaab.sessions.create()` | `client.Sessions.Create()` |
| [List sessions](https://docs.kaab.ist/reference/api/sessions/list-sessions) | `kaab.sessions.list()` | `kaab.sessions.list()` | `client.Sessions.List()` |
| [Read a session by id or name](https://docs.kaab.ist/reference/api/sessions/get-session) | `kaab.sessions.get()` | `kaab.sessions.get()` | `client.Sessions.Get()` |
| [Rename a session or replace its storage state](https://docs.kaab.ist/reference/api/sessions/update-session) | `kaab.sessions.update()` | `kaab.sessions.update()` | `client.Sessions.Update()` |
| [Delete a session](https://docs.kaab.ist/reference/api/sessions/delete-session) | `kaab.sessions.delete()` | `kaab.sessions.delete()` | `client.Sessions.Delete()` |
| [Run the validity probe](https://docs.kaab.ist/reference/api/sessions/verify-session) | `kaab.sessions.verify()` | `kaab.sessions.verify()` | `client.Sessions.Verify()` |
| [Enqueue the session's refresh program](https://docs.kaab.ist/reference/api/sessions/refresh-session) | `kaab.sessions.refresh()` | `kaab.sessions.refresh()` | `client.Sessions.Refresh()` |
| [List proposals](https://docs.kaab.ist/reference/api/proposals/list-proposals) | `kaab.proposals.list()` | `kaab.proposals.list()` | `client.Proposals.List()` |
| [Read a proposal](https://docs.kaab.ist/reference/api/proposals/get-proposal) | `kaab.proposals.get()` | `kaab.proposals.get()` | `client.Proposals.Get()` |
| [Approve a proposal, optionally promoting it to a new version](https://docs.kaab.ist/reference/api/proposals/approve-proposal) | `kaab.proposals.approve()` | `kaab.proposals.approve()` | `client.Proposals.Approve()` |
| [Reject a proposal](https://docs.kaab.ist/reference/api/proposals/reject-proposal) | `kaab.proposals.reject()` | `kaab.proposals.reject()` | `client.Proposals.Reject()` |
| [Replace the proposed change before approval](https://docs.kaab.ist/reference/api/proposals/edit-proposal) | `kaab.proposals.edit()` | `kaab.proposals.edit()` | `client.Proposals.Edit()` |
| [Create a cron schedule for a program](https://docs.kaab.ist/reference/api/schedules/create-schedule) | `kaab.schedules.create()` | `kaab.schedules.create()` | `client.Schedules.Create()` |
| [List schedules](https://docs.kaab.ist/reference/api/schedules/list-schedules) | `kaab.schedules.list()` | `kaab.schedules.list()` | `client.Schedules.List()` |
| [Read a schedule](https://docs.kaab.ist/reference/api/schedules/get-schedule) | `kaab.schedules.get()` | `kaab.schedules.get()` | `client.Schedules.Get()` |
| [Change a schedule](https://docs.kaab.ist/reference/api/schedules/update-schedule) | `kaab.schedules.update()` | `kaab.schedules.update()` | `client.Schedules.Update()` |
| [Delete a schedule](https://docs.kaab.ist/reference/api/schedules/delete-schedule) | `kaab.schedules.delete()` | `kaab.schedules.delete()` | `client.Schedules.Delete()` |
| [Pause a schedule](https://docs.kaab.ist/reference/api/schedules/pause-schedule) | `kaab.schedules.pause()` | `kaab.schedules.pause()` | `client.Schedules.Pause()` |
| [Resume a paused schedule](https://docs.kaab.ist/reference/api/schedules/resume-schedule) | `kaab.schedules.resume()` | `kaab.schedules.resume()` | `client.Schedules.Resume()` |
| [List the runs of a schedule](https://docs.kaab.ist/reference/api/schedules/list-schedule-runs) | `kaab.schedules.runs()` | `kaab.schedules.runs()` | `client.Schedules.Runs()` |
| [Redirect to a presigned URL of a run's JSON Patch against the previous run](https://docs.kaab.ist/reference/api/schedules/get-schedule-run-diff) | `kaab.schedules.runDiff()` | `kaab.schedules.run_diff()` | `client.Schedules.RunDiff()` |
| [Register a webhook endpoint; the secret is shown once](https://docs.kaab.ist/reference/api/webhooks/create-webhook) | `kaab.webhooks.create()` | `kaab.webhooks.create()` | `client.Webhooks.Create()` |
| [List webhook endpoints](https://docs.kaab.ist/reference/api/webhooks/list-webhooks) | `kaab.webhooks.list()` | `kaab.webhooks.list()` | `client.Webhooks.List()` |
| [Read a webhook endpoint](https://docs.kaab.ist/reference/api/webhooks/get-webhook) | `kaab.webhooks.get()` | `kaab.webhooks.get()` | `client.Webhooks.Get()` |
| [Change a webhook endpoint](https://docs.kaab.ist/reference/api/webhooks/update-webhook) | `kaab.webhooks.update()` | `kaab.webhooks.update()` | `client.Webhooks.Update()` |
| [Delete a webhook endpoint](https://docs.kaab.ist/reference/api/webhooks/delete-webhook) | `kaab.webhooks.delete()` | `kaab.webhooks.delete()` | `client.Webhooks.Delete()` |
| [Rotate the signing secret](https://docs.kaab.ist/reference/api/webhooks/rotate-webhook-secret) | `kaab.webhooks.rotateSecret()` | `kaab.webhooks.rotate_secret()` | `client.Webhooks.RotateSecret()` |
| [List delivery attempts](https://docs.kaab.ist/reference/api/webhooks/list-webhook-deliveries) | `kaab.webhooks.deliveries()` | `kaab.webhooks.deliveries()` | `client.Webhooks.Deliveries()` |
| [Resend one delivery as a new attempt row; the original is never changed](https://docs.kaab.ist/reference/api/webhooks/resend-webhook-delivery) | `kaab.webhooks.resendDelivery()` | `kaab.webhooks.resend_delivery()` | `client.Webhooks.ResendDelivery()` |
| [Send a `ping` event to the endpoint and wait up to 10 s for its answer](https://docs.kaab.ist/reference/api/webhooks/test-webhook) | `kaab.webhooks.test()` | `kaab.webhooks.test()` | `client.Webhooks.Test()` |
| [Rotate the secret ad-hoc `webhook_url` deliveries are signed with; shown once](https://docs.kaab.ist/reference/api/org/rotate-org-webhook-secret) | `kaab.org.rotateWebhookSecret()` | `kaab.org.rotate_webhook_secret()` | `client.Org.RotateWebhookSecret()` |
| [Read the calling organisation](https://docs.kaab.ist/reference/api/org/get-org) | `kaab.org.get()` | `kaab.org.get()` | `client.Org.Get()` |
| [Read credit balance and pools](https://docs.kaab.ist/reference/api/credits/get-credits) | `kaab.credits.get()` | `kaab.credits.get()` | `client.Credits.Get()` |
| [List ledger entries](https://docs.kaab.ist/reference/api/ledger/list-ledger-entries) | `kaab.ledger.list()` | `kaab.ledger.list()` | `client.Ledger.List()` |
| [Aggregated usage over a period](https://docs.kaab.ist/reference/api/usage/get-usage) | `kaab.usage.get()` | `kaab.usage.get()` | `client.Usage.Get()` |
| [List API keys](https://docs.kaab.ist/reference/api/api-keys/list-api-keys) | `kaab.apiKeys.list()` | `kaab.api_keys.list()` | `client.APIKeys.List()` |
| [Create an API key; the secret is shown once](https://docs.kaab.ist/reference/api/api-keys/create-api-key) | `kaab.apiKeys.create()` | `kaab.api_keys.create()` | `client.APIKeys.Create()` |
| [Rotate an API key with an optional grace period](https://docs.kaab.ist/reference/api/api-keys/rotate-api-key) | `kaab.apiKeys.rotate()` | `kaab.api_keys.rotate()` | `client.APIKeys.Rotate()` |
| [Revoke an API key](https://docs.kaab.ist/reference/api/api-keys/revoke-api-key) | `kaab.apiKeys.revoke()` | `kaab.api_keys.revoke()` | `client.APIKeys.Revoke()` |
| [List bring-your-own providers](https://docs.kaab.ist/reference/api/byo-providers/list-byo-providers) | `kaab.byoProviders.list()` | `kaab.byo_providers.list()` | `client.BYOProviders.List()` |
| [Register a bring-your-own provider](https://docs.kaab.ist/reference/api/byo-providers/create-byo-provider) | `kaab.byoProviders.create()` | `kaab.byo_providers.create()` | `client.BYOProviders.Create()` |
| [Read a bring-your-own provider](https://docs.kaab.ist/reference/api/byo-providers/get-byo-provider) | `kaab.byoProviders.get()` | `kaab.byo_providers.get()` | `client.BYOProviders.Get()` |
| [Change a bring-your-own provider](https://docs.kaab.ist/reference/api/byo-providers/update-byo-provider) | `kaab.byoProviders.update()` | `kaab.byo_providers.update()` | `client.BYOProviders.Update()` |
| [Delete a bring-your-own provider](https://docs.kaab.ist/reference/api/byo-providers/delete-byo-provider) | `kaab.byoProviders.delete()` | `kaab.byo_providers.delete()` | `client.BYOProviders.Delete()` |
| [Health-check a bring-your-own provider](https://docs.kaab.ist/reference/api/byo-providers/test-byo-provider) | `kaab.byoProviders.test()` | `kaab.byo_providers.test()` | `client.BYOProviders.Test()` |
| [Purge the organisation's data within 24 hours](https://docs.kaab.ist/reference/api/org/request-data-deletion) | `kaab.org.requestDataDeletion()` | `kaab.org.request_data_deletion()` | `client.Org.RequestDataDeletion()` |
| [Read the learned site profile visible to the organisation](https://docs.kaab.ist/reference/api/sites/get-site-profile) | `kaab.sites.get()` | `kaab.sites.get()` | `client.Sites.Get()` |
