# Official AudD SDKs


We maintain official client libraries for 11 languages — pick the one for your stack. Each SDK is feature-complete and idiomatic to its ecosystem; they all wrap the same HTTP API.

You can also call the HTTP API directly without an SDK — it's intentionally simple. See the [main docs](/) for the raw endpoints.

[Sign up for an API token](https://dashboard.audd.io/) and drop the snippet for your language into your project. Replace `"your-api-token"` in the snippets with the token from your dashboard. For a quick try without signing up, the public `"test"` token works (capped at 10 requests).

<div className="tabs-section sdk-tabs"><Tabs
  groupId="sdk-language"
  defaultValue="python"
  values={[
    { label: 'Python', value: 'python' },
    { label: 'Node', value: 'node' },
    { label: 'Go', value: 'go' },
    { label: 'Rust', value: 'rust' },
    { label: 'PHP', value: 'php' },
    { label: 'Swift', value: 'swift' },
    { label: 'Kotlin', value: 'kotlin' },
    { label: 'C#', value: 'dotnet' },
    { label: 'Java', value: 'java' },
    { label: 'C', value: 'c' },
    { label: 'C++', value: 'cpp' },
  ]}>

<TabItem value="python">

**Python 3.9+** · sync and async clients.


```bash
pip install audd
```

```python
from audd import AudD

audd = AudD("your-api-token")
result = audd.recognize("https://audd.tech/example.mp3")
print(f"{result.artist} — {result.title}")
```

<div className="sdk-links">
  <a className="button button--primary" href="https://github.com/AudDMusic/audd-python" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--secondary" href="https://pypi.org/project/audd/" target="_blank" rel="noopener">PyPI</a>
</div>

</TabItem>

<TabItem value="node">

**Node 18+** · TypeScript-first · longpoll usable from the browser.

```bash
npm install @audd/sdk
```

```ts

const audd = new AudD("your-api-token");
const song = await audd.recognize("https://audd.tech/example.mp3");
console.log(`${song.artist} — ${song.title}`);
```

<div className="sdk-links">
  <a className="button button--primary" href="https://github.com/AudDMusic/audd-node" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--secondary" href="https://www.npmjs.com/package/@audd/sdk" target="_blank" rel="noopener">npm</a>
</div>

</TabItem>

<TabItem value="go">

**Go 1.21+**.

```sh
go get github.com/AudDMusic/audd-go
```

```go
client := audd.NewClient("your-api-token")
defer client.Close()

result, _ := client.Recognize("https://audd.tech/example.mp3", nil)
fmt.Printf("%s — %s\n", result.Artist, result.Title)
```

<div className="sdk-links">
  <a className="button button--primary" href="https://github.com/AudDMusic/audd-go" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--secondary" href="https://pkg.go.dev/github.com/AudDMusic/audd-go" target="_blank" rel="noopener">pkg.go.dev</a>
</div>

</TabItem>

<TabItem value="rust">

**Rust 1.88+**.

```sh
cargo add audd
```

```rust
use audd::AudD;

let audd = AudD::new("your-api-token");
let r = audd.recognize("https://audd.tech/example.mp3").await?;
if let Some(song) = r {
    println!("{} — {}",
        song.artist.as_deref().unwrap_or(""),
        song.title.as_deref().unwrap_or(""));
}
```

<div className="sdk-links">
  <a className="button button--primary" href="https://github.com/AudDMusic/audd-rust" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--secondary" href="https://crates.io/crates/audd" target="_blank" rel="noopener">crates.io</a>
  <a className="button button--secondary" href="https://docs.rs/audd" target="_blank" rel="noopener">docs.rs</a>
</div>

</TabItem>

<TabItem value="php">

**PHP 8.1+**.

```bash
composer require audd/audd
```

```php
use AudD\AudD;

$audd = new AudD('your-api-token');
$r = $audd->recognize('https://audd.tech/example.mp3');
echo $r->artist . ' — ' . $r->title;
```

<div className="sdk-links">
  <a className="button button--primary" href="https://github.com/AudDMusic/audd-php" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--secondary" href="https://packagist.org/packages/audd/audd" target="_blank" rel="noopener">Packagist</a>
</div>

</TabItem>

<TabItem value="swift">

**Swift 5.9+** · iOS 15+, macOS 12+, watchOS 8+, tvOS 15+, visionOS 1+, Linux.

```swift
.package(url: "https://github.com/AudDMusic/audd-swift", from: "1.5.6"),
```

```swift

let audd = try AudD(apiToken: "your-api-token")
let r = try await audd.recognize("https://audd.tech/example.mp3")
print("\(r?.artist ?? "") — \(r?.title ?? "")")
```

<div className="sdk-links">
  <a className="button button--primary" href="https://github.com/AudDMusic/audd-swift" target="_blank" rel="noopener">View on GitHub</a>
</div>

</TabItem>

<TabItem value="kotlin">

**Kotlin 1.9+**.

```kotlin
implementation("io.audd:audd-kotlin:1.5.5")
```

```kotlin
AudD("your-api-token").use { audd ->
    val r = audd.recognize("https://audd.tech/example.mp3")
    println("${r?.artist} — ${r?.title}")
}
```

<div className="sdk-links">
  <a className="button button--primary" href="https://github.com/AudDMusic/audd-kotlin" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--secondary" href="https://central.sonatype.com/artifact/io.audd/audd-kotlin" target="_blank" rel="noopener">Maven Central</a>
</div>

</TabItem>

<TabItem value="dotnet">

**.NET 6 / 8** · AOT-friendly.

```bash
dotnet add package AudD
```

```csharp
using AudD;

var audd = new AudD("your-api-token");
var r = await audd.RecognizeAsync("https://audd.tech/example.mp3");
Console.WriteLine($"{r?.Artist} — {r?.Title}");
```

<div className="sdk-links">
  <a className="button button--primary" href="https://github.com/AudDMusic/audd-dotnet" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--secondary" href="https://www.nuget.org/packages/AudD" target="_blank" rel="noopener">NuGet</a>
</div>

</TabItem>

<TabItem value="java">

**Java 11+**.


```xml
<dependency>
  <groupId>io.audd</groupId>
  <artifactId>audd</artifactId>
  <version>1.5.5</version>
</dependency>
```

```java
try (AudD audd = new AudD("your-api-token")) {
    var r = audd.recognize("https://audd.tech/example.mp3");
    System.out.println(r.artist() + " — " + r.title());
}
```

<div className="sdk-links">
  <a className="button button--primary" href="https://github.com/AudDMusic/audd-java" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--secondary" href="https://central.sonatype.com/artifact/io.audd/audd" target="_blank" rel="noopener">Maven Central</a>
</div>

</TabItem>

<TabItem value="c">

**C99** · requires system libcurl.

```cmake
FetchContent_Declare(audd
    GIT_REPOSITORY https://github.com/AudDMusic/audd-c.git
    GIT_TAG        v1.5.5)
FetchContent_MakeAvailable(audd)
target_link_libraries(your_app PRIVATE audd)
```

```c
audd_client_t *c = audd_client_new("your-api-token", NULL);
audd_recognition_t *r = NULL;
audd_recognize(c, "https://audd.tech/example.mp3", NULL, &r);
printf("%s — %s\n", audd_recognition_get_artist(r),
                    audd_recognition_get_title(r));
```

<div className="sdk-links">
  <a className="button button--primary" href="https://github.com/AudDMusic/audd-c" target="_blank" rel="noopener">View on GitHub</a>
</div>

</TabItem>

<TabItem value="cpp">

**C++17** (C++20 opt-in) · requires system libcurl.

```cmake
find_package(audd CONFIG REQUIRED)
target_link_libraries(your_app PRIVATE audd::audd)
```

```cpp
#include <audd/audd.hpp>

audd::AudD client("your-api-token");
auto r = client.recognize("https://audd.tech/example.mp3");
std::cout << r->artist << " - " << r->title << "\n";
```

<div className="sdk-links">
  <a className="button button--primary" href="https://github.com/AudDMusic/audd-cpp" target="_blank" rel="noopener">View on GitHub</a>
</div>

</TabItem>

</Tabs></div>

<br />

:::tip Don't see your language?

The HTTP API is a single `multipart/form-data POST` to `https://api.audd.io/`. Curl one-liner: `curl https://api.audd.io/ -F url='https://audd.tech/example.mp3' -F api_token='test'`. See the [main docs](/) for the full request shape.

If we should add a first-class SDK for another language, [tell us](mailto:api@audd.io).

:::
