> ## Documentation Index
> Fetch the complete documentation index at: https://docs.incident.io/llms.txt
> Use this file to discover all available pages before exploring further.

# SDKs

> Call the incident.io API from your own code with an official client library for your language.

Calling an API by hand is fine for a one-off script. Once you're building something that lasts, like a sync job, an internal tool, or an integration with a system we don't support natively, you end up writing the same things over and over: request and response types, authentication, pagination loops, error handling. And every time the API changes, you have to notice and update your code.

Our SDKs do that work for you. We publish an official client for seven languages, each generated from our [OpenAPI specification](https://api.incident.io/v1/openapiV3.json). That means every endpoint in the [API reference](/api-reference/introduction) is there, with a typed request and response for each one, and the names match the reference so it's easy to go from one to the other.

## What you get

* **Every endpoint, typed.** Request bodies, responses, and enums all have types, so your editor can complete them and your compiler or type checker can catch mistakes before you run anything.
* **Kept up to date automatically.** When the API changes, the SDKs follow, so new endpoints and fields show up without anyone having to ask for them.

## Choose your language

<CardGroup cols={2}>
  <Card title="Go" icon="golang" href="/integrations/sdk-go">
    The official incident.io SDK for Go.
  </Card>

  <Card title="TypeScript" icon="js" href="/integrations/sdk-typescript">
    The official incident.io SDK for TypeScript and JavaScript.
  </Card>

  <Card title="Python" icon="python" href="/integrations/sdk-python">
    The official incident.io SDK for Python.
  </Card>

  <Card title="Rust" icon="rust" href="/integrations/sdk-rust">
    The official incident.io SDK for Rust.
  </Card>

  <Card title="Ruby" icon="gem" href="/integrations/sdk-ruby">
    The official incident.io SDK for Ruby.
  </Card>

  <Card title="PHP" icon="php" href="/integrations/sdk-php">
    The official incident.io SDK for PHP.
  </Card>

  <Card title=".NET" icon="microsoft" href="/integrations/sdk-dotnet">
    The official incident.io SDK for .NET.
  </Card>
</CardGroup>

## Before you start

Every SDK authenticates with an API key. Create one in **Settings > API keys** and choose the permissions it needs. We only show the token once, so store it somewhere safe, like your secret manager or an environment variable. See [API keys](/admin/api-keys) for the permissions you can give each key.

The SDKs are for server-side code. An API key in a browser is readable by anyone who loads the page.

## Versioning

All seven SDKs use [semantic versioning](https://semver.org/), and releases are cut automatically. When the API grows (a new endpoint, a new field, a new optional parameter), you get a new minor version, and upgrading is safe.

When a change would break code that uses the SDK, such as a field being removed or renamed, the release is a new major version instead, and the release notes list what broke. Your package manager won't move you to a new major version on its own, so you can upgrade when you're ready.

Go is the exception. A new major version of a Go module changes its import path, so the Go SDK releases minor versions only. See [Go](/integrations/sdk-go#versioning) for the details.

## Other ways to use the API

If your language isn't listed, you can generate a client yourself from the [OpenAPI specification](https://api.incident.io/v1/openapiV3.json). For managing configuration as code, we also have providers for [Terraform](/admin/terraform) and [Pulumi](/admin/pulumi), and for working from your terminal there's the [`inc` CLI](/integrations/cli).
