# SDKs

The SDKs wrap the [API](/api): functions, runs, uploads, logs, outputs and webhook checks. Both have no dependencies.

The packages publish as `@usejinn/sdk` (npm) and `usejinn.com/go` (Go). Until they are on the registries, ask Jinn for the source, or use the CLI and the HTTP API.

## TypeScript

```ts
import { Jinn, tar, untar } from "@usejinn/sdk";

const jinn = new Jinn({ key: process.env.JINN_KEY! });
const input = await jinn.upload(tar({ "ticket.json": JSON.stringify(ticket) }));
let run = await jinn.startRun("fnc_5d2a91c07e4b38f6a1d0c2e9", { prompt: "Answer this ticket.", input });
run = await jinn.wait(run.id);
if (run.state === "succeeded") {
  const files = untar(await jinn.output(run));
  console.log(new TextDecoder().decode(files["reply.md"]));
} else {
  console.error(run.failure, run.detail);
}
```

It runs in Node 20 and later, Deno, Bun and browsers. `verifyWebhook` checks a [webhook](/webhooks).

## Go

```go
c := jinn.New(os.Getenv("JINN_KEY"))
in, err := c.UploadFolder(ctx, "./ticket")
run, err := c.StartRun(ctx, "fnc_5d2a91c07e4b38f6a1d0c2e9", jinn.RunRequest{Prompt: "Answer this ticket.", Input: in})
run, err = c.Wait(ctx, run.ID)
if run.State == jinn.Succeeded {
	err = c.DownloadOutput(ctx, run, "./result")
}
```

`jinn.VerifyWebhook` checks a [webhook](/webhooks).
