TAAFT
Free mode
100% free
Freemium
Free Trial
Deals

AssemblyAI / assemblyai-java-sdk

The AssemblyAI Java SDK provides an easy-to-use interface for interacting with the AssemblyAI API, which supports async and real-time transcription, audio intelligence models, as well as the latest LeMUR models.

17 7 Language: Java License: MIT Updated: 7mo ago

README

AssemblyAI Java Library

Maven Central
fern shield
GitHub License
AssemblyAI Twitter
AssemblyAI YouTube
Discord

[!IMPORTANT]
As of April 2025, AssemblyAI Java SDK has been discontinued and will no longer be maintained.

While the SDK will no longer be updated, any previously published releases will remain available.

Going forward, see the AssemblyAI API reference for information on how to integrate with our API directly.

We know this is a disruptive change. If you need help with this transition, reach out to our Support team and we'll help you in any way we can.

Documentation

API reference documentation is available here.

Requirements

Java 8+

Installation

Gradle

Add the dependency in your build.gradle:

dependencies {
    implementation 'com.assemblyai:assemblyai-java:x.x.x'
}

Maven

Add the dependency in your pom.xml:

<dependency>
    <groupId>com.assemblyai</groupId>
    <artifactId>assemblyai-java</artifactId>
    <version>x.x.x</version>
</dependency>

HTTP Client Usage

The SDK exports a vanilla HTTP client, AssemblyAI. You can
use this to call into each of our API endpoints and get typed
responses back.

import com.assemblyai.api.AssemblyAI;

AssemblyAI aai = AssemblyAI.builder()
  .apiKey("YOUR_API_KEY")
  .build();

Transcript transcript = aai.transcripts().get("transcript-id");

System.out.printlin("Received response!" + transcript);

Handling Errors

When the API returns a non-success status code (4xx or 5xx response),
a subclass of ApiError
will be thrown:

import com.assemblyai.api.core.ApiError;

try {
  aai.transcript().get("transcript-id");
} catch (ApiError error) {
  System.out.println(error.getBody());
  System.out.println(error.getStatusCode());
}

Creating a transcript

When you create a transcript, you can either pass in a URL to an audio file
or upload a file directly.

import com.assemblyai.api.resources.transcripts.types.Transcript;

// Transcribe file at remote URL
Transcript transcript = aai.transcripts().transcribe(
        "https://assembly.ai/espn.m4a");

// Upload a file via local path and transcribe
transcript = aai.transcripts().transcribe(
        new File("./news.mp4"));

transcribe queues a transcription job and polls it until the status is completed or error.
If you don't want to wait until the transcript is ready, you can use submit:

import com.assemblyai.api.resources.transcripts.types.Transcript;

// Transcribe file at remote URL
Transcript transcript = aai.transcripts().submit(
        "https://assembly.ai/espn.m4a");

// Upload a file via local path and transcribe
transcript = aai.transcripts().submit(
        new File("./news.mp4"));

Using the Realtime Transcriber

The Realtime Transcriber can be used to process any live
audio streams and sends data over websockets. The Realtime Transcriber
will take event handlers

import com.assemblyai.api.RealtimeTranscriber;

RealtimeTranscriber realtime = RealtimeTranscriber.builder()
  .apiKey("YOUR_API_KEY")
  .onPartialTranscript(partial -> System.out.println(partial))
  .onFinalTranscript(finalTranscript -> System.out.println(finalTranscript))
  .build();

realtime.sendAudio(new byte[]{...});

realtime.close();

Staged Builders

The generated builders all follow the staged builder pattern.
Read more here.
Staged builders only allow you to construct the object once all required
properties have been specified.

For example, in the snippet below, you will not be able to access the build
method on CreateTranscriptParameters until you have specified the mandatory
audioUrl variable.

import com.assemblyai.api.resources.transcripts.requests.TranscriptParams;

TranscriptParams params = TranscriptParams.builder()
        .audioUrl("https://...")
        .build();

Timeouts

The SDK uses the default timeouts of OkHttpClient:

  • 10 seconds for connection timeout
  • 10 seconds for read timeout
  • 10 seconds for write timeout
  • No timeout for call timeout

However, there are no timeouts for any LeMUR HTTP request.

To specify your own timeout, you can pass RequestOptions to each request method:

import com.assemblyai.api.core.RequestOptions;

// initialize client

client.transcripts()
        .get(
                "50c54d73-7a3f-44dc-af6b-f4579841b1ce",
                RequestOptions.builder()
                        .timeout(30, TimeUnit.SECONDS)
                        .build()
        );

For this operation, the call timeout will be 30 seconds, and the other timeouts will be turned off.

The default timeout should be sufficient for most use cases.
However, depending on your network speed and distance, you may occasionally experience timeouts, in which case you can increase the timeout.

Android

If you've enabled Code shrinking using minifyEnabled, you need to add the following ProGuard configuration to keep R8 from incorrectly marking the SDK classes as unused.

-keep class com.assemblyai.api.** { *; }

Contributing

While we value open-source contributions to this SDK, this library
is generated programmatically. Additions made directly to this library
would have to be moved over to our generation code, otherwise they would
be overwritten upon the next generated release. Feel free to open a PR as a
proof of concept, but know that we will not be able to merge it as-is.
We suggest opening an issue first to discuss with us!

On the other hand, contributions to the README are always very welcome!

0 AIs selected
Clear selection
#
Name
Task