# Official AudD SDKs

We maintain official client libraries for 11 languages — pick the one for your stack. 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/day).

**Python:**

**Python 3.10+** · 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")
if result:
    print(f"{result.artist} — {result.title}")
```

  <a className="button button--primary" href="/sdks/python">Read the Python docs →</a>
  <a className="button button--secondary" href="https://github.com/AudDMusic/audd-python" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--link" href="https://pypi.org/project/audd/" target="_blank" rel="noopener">PyPI</a>

**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}`);
```

  <a className="button button--primary" href="/sdks/node">Read the Node docs →</a>
  <a className="button button--secondary" href="https://github.com/AudDMusic/audd-node" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--link" href="https://www.npmjs.com/package/@audd/sdk" target="_blank" rel="noopener">npm</a>

**Go:**

**Go 1.21+**.

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

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

result, err := client.Recognize("https://audd.tech/example.mp3", nil)
if err == nil && result != nil {
	fmt.Printf("%s — %s\n", result.Artist, result.Title)
}
```

  <a className="button button--primary" href="/sdks/go">Read the Go docs →</a>
  <a className="button button--secondary" href="https://github.com/AudDMusic/audd-go" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--link" href="https://pkg.go.dev/github.com/AudDMusic/audd-go" target="_blank" rel="noopener">pkg.go.dev</a>

**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(""));
}
```

  <a className="button button--primary" href="/sdks/rust">Read the Rust docs →</a>
  <a className="button button--secondary" href="https://github.com/AudDMusic/audd-rust" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--link" href="https://crates.io/crates/audd" target="_blank" rel="noopener">crates.io</a>
  <a className="button button--link" href="https://docs.rs/audd" target="_blank" rel="noopener">docs.rs</a>

**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;
```

  <a className="button button--primary" href="/sdks/php">Read the PHP docs →</a>
  <a className="button button--secondary" href="https://github.com/AudDMusic/audd-php" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--link" href="https://packagist.org/packages/audd/audd" target="_blank" rel="noopener">Packagist</a>

**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.19"),
```

```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 ?? "")")
```

  <a className="button button--primary" href="/sdks/swift">Read the Swift docs →</a>
  <a className="button button--secondary" href="https://github.com/AudDMusic/audd-swift" target="_blank" rel="noopener">View on GitHub</a>

**kotlin:**

**Kotlin 1.9+**.

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

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

  <a className="button button--primary" href="/sdks/kotlin">Read the Kotlin docs →</a>
  <a className="button button--secondary" href="https://github.com/AudDMusic/audd-kotlin" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--link" href="https://central.sonatype.com/artifact/io.audd/audd-kotlin" target="_blank" rel="noopener">Maven Central</a>

**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}");
```

  <a className="button button--primary" href="/sdks/dotnet">Read the C# docs →</a>
  <a className="button button--secondary" href="https://github.com/AudDMusic/audd-dotnet" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--link" href="https://www.nuget.org/packages/AudD" target="_blank" rel="noopener">NuGet</a>

**Java:**

**Java 11+**.

```xml
<dependency>
  <groupId>io.audd</groupId>
  <artifactId>audd</artifactId>
  <version>1.5.16</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());
}
```

  <a className="button button--primary" href="/sdks/java">Read the Java docs →</a>
  <a className="button button--secondary" href="https://github.com/AudDMusic/audd-java" target="_blank" rel="noopener">View on GitHub</a>
  <a className="button button--link" href="https://central.sonatype.com/artifact/io.audd/audd" target="_blank" rel="noopener">Maven Central</a>

**c:**

**C99** · requires system libcurl.

```cmake
FetchContent_Declare(audd
    GIT_REPOSITORY https://github.com/AudDMusic/audd-c.git
    GIT_TAG        v1.5.16)
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;
if (audd_recognize(c, "https://audd.tech/example.mp3", NULL, &r) == AUDD_OK && r) {
    printf("%s — %s\n", audd_recognition_get_artist(r),
                        audd_recognition_get_title(r));
}
```

  <a className="button button--primary" href="/sdks/c">Read the C docs →</a>
  <a className="button button--secondary" href="https://github.com/AudDMusic/audd-c" target="_blank" rel="noopener">View on GitHub</a>

**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");
if (r) {
    std::cout << r->artist << " — " << r->title << "\n";
}
```

  <a className="button button--primary" href="/sdks/cpp">Read the C++ docs →</a>
  <a className="button button--secondary" href="https://github.com/AudDMusic/audd-cpp" target="_blank" rel="noopener">View on GitHub</a>

<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).

:::
