Official Python SDK for Deepgram. Power your apps with world-class speech and Language AI models.
- Pre-Recorded (Synchronous)
- Pre-Recorded (Asynchronous / Callbacks)
- Streaming Audio
- Transcribing to Captions
- Voice Agent
- Text to Speech REST
- Text to Speech Streaming
- Text Intelligence
- Authentication
- Projects
- Keys
- Members
- Scopes
- Invitations
- Usage
- Billing
- Models
- On-Prem APIs
- Logging
- Backwards Compatibility
- Development and Contributing
- Getting Help
You can learn more about the Deepgram API at developers.deepgram.com.
🔑 To access the Deepgram API you will need a free Deepgram API Key.
Python (version ^3.10)
To install the latest version available:
pip install deepgram-sdk
All of the examples below will require DeepgramClient
.
from deepgram import DeepgramClient
# Initialize the client
deepgram = DeepgramClient("YOUR_API_KEY") # Replace with your API key
Transcribe audio from a URL.
from deepgram import PrerecordedOptions
response = deepgram.listen.rest.v("1").transcribe_url(
source={"url": "https://dpgr.am/spacewalk.wav"},
options=PrerecordedOptions(model="nova-3") # Apply other options
)
See our API reference for more info.
See the Example for more info.
Transcribe audio from a file.
from deepgram import PrerecordedOptions
response = deepgram.listen.rest.v("1").transcribe_file(
source=open("path/to/your/audio.wav", "rb"),
options=PrerecordedOptions(model="nova-3") # Apply other options
)
See our API reference for more info.
See the Example for more info.
Transcribe audio from a URL.
from deepgram import PrerecordedOptions
response = deepgram.listen.rest.v("1").transcribe_url_async(
source={"url": "https://dpgr.am/spacewalk.wav"},
callback_url="https://your-callback-url.com/webhook",
options=PrerecordedOptions(model="nova-3") # Apply other options
)
See our API reference for more info.
See the Example for more info.
Transcribe audio from a file.
from deepgram import PrerecordedOptions
response = deepgram.listen.rest.v("1").transcribe_file_async(
source=open("path/to/your/audio.wav", "rb"),
callback_url="https://your-callback-url.com/webhook",
options=PrerecordedOptions(model="nova-3") # Apply other options
)
See our API reference for more info.
See the Example for more info.
Transcribe streaming audio.
from deepgram import LiveOptions, LiveTranscriptionEvents
# Create a websocket connection
connection = deepgram.listen.websocket.v("1")
# Handle transcription events
@connection.on(LiveTranscriptionEvents.Transcript)
def handle_transcript(result):
print(result.channel.alternatives[0].transcript)
# Start connection with streaming options
connection.start(LiveOptions(model="nova-3", language="en-US"))
# Send audio data
connection.send(open("path/to/your/audio.wav", "rb").read())
# Close when done
connection.finish()
See our API reference for more info.
See the Examples for more info.
Transcribe audio to captions.
from deepgram_captions import DeepgramConverter, webvtt
transcription = DeepgramConverter(dg_response)
captions = webvtt(transcription)
from deepgram_captions import DeepgramConverter, srt
transcription = DeepgramConverter(dg_response)
captions = srt(transcription)
See our stand alone captions library for more information..
Configure a Voice Agent.
from deepgram import (
SettingsOptions
)
# Create websocket connection
connection = deepgram.agent.websocket.v("1")
# Configure agent settings
options = SettingsOptions()
options.language = "en"
options.agent.think.provider.type = "open_ai"
options.agent.think.provider.model = "gpt-4o-mini"
options.agent.think.prompt = "You are a helpful AI assistant."
options.agent.listen.provider.type = "deepgram"
options.agent.listen.provider.model = "nova-3"
options.agent.speak.provider.type = "deepgram"
options.agent.speak.provider.model ="aura-2-thalia-en"
options.greeting = "Hello, I'm your AI assistant."
# Start the connection
connection.start(options)
# Close the connection
connection.finish()
This example demonstrates:
- Setting up a WebSocket connection
- Configuring the agent with speech, language, and audio settings
- Handling various agent events (speech, transcripts, audio)
- Sending audio data and keeping the connection alive
For a complete implementation, you would need to:
- Add your audio input source (e.g., microphone)
- Implement audio playback for the agent's responses
- Handle any function calls if your agent uses them
- Add proper error handling and connection management
See our API reference for more info.
See the Examples for more info.
Convert text into speech using the REST API.
from deepgram import SpeakOptions
# Configure speech options
options = SpeakOptions(model="aura-2-thalia-en")
# Convert text to speech and save to file
response = deepgram.speak.rest.v("1").save(
"output.mp3",
{"text": "Hello world!"},
options
)
See our API reference for more info.
See the Example for more info.
Convert streaming text into speech using a Websocket.
from deepgram import (
SpeakWSOptions,
SpeakWebSocketEvents
)
# Create websocket connection
connection = deepgram.speak.websocket.v("1")
# Handle audio data
@connection.on(SpeakWebSocketEvents.AudioData)
# Configure streaming options
options = SpeakWSOptions(
model="aura-2-thalia-en",
encoding="linear16",
sample_rate=16000
)
# Start connection and send text
connection.start(options)
connection.send_text("Hello, this is a text to speech example.")
connection.flush()
connection.wait_for_complete()
# Close when done
connection.finish()
See our API reference for more info.
See the Examples for more info.
Analyze text.
from deepgram import ReadOptions
# Configure read options
options = ReadOptions(
model="nova-3",
language="en"
)
# Process text for intelligence
response = deepgram.read.rest.v("1").process(
text="The quick brown fox jumps over the lazy dog.",
options=options
)
See our API reference for more info.
Retrieves the details of the current authentication token.
response = deepgram.manage.rest.v("1").get_token_details()
See our API reference for more info.
Creates a temporary token with a 30-second TTL.
response = deepgram.auth.v("1").grant_token()
See our API reference for more info.
See The Examples for more info
Returns all projects accessible by the API key.
response = deepgram.manage.v("1").get_projects()
See our API reference for more info.
See The Example for more info.
Retrieves a specific project based on the provided project_id.
response = deepgram.manage.v("1").get_project(myProjectId)
See our API reference for more info.
See The Example for more info.
Update a project.
response = deepgram.manage.v("1").update_project(myProjectId, options)
See our API reference for more info.
See The Example for more info.
Delete a project.
response = deepgram.manage.v("1").delete_project(myProjectId)
See our API reference for more info.
See The Example for more info.
Retrieves all keys associated with the provided project_id.
response = deepgram.manage.v("1").get_keys(myProjectId)
See our API reference for more info
See The Example for more info.
Retrieves a specific key associated with the provided project_id.
response = deepgram.manage.v("1").get_key(myProjectId, myKeyId)
See our API reference for more info
See The Example for more info.
Creates an API key with the provided scopes.
response = deepgram.manage.v("1").create_key(myProjectId, options)
See our API reference for more info
See The Example for more info.
Deletes a specific key associated with the provided project_id.
response = deepgram.manage.v("1").delete_key(myProjectId, myKeyId)
See our API reference for more info
See The Example for more info.
Retrieves account objects for all of the accounts in the specified project_id.
response = deepgram.manage.v("1").get_members(myProjectId)
See our API reference for more info.
See The Example for more info.
Removes member account for specified member_id.
response = deepgram.manage.v("1").remove_member(myProjectId, MemberId)
See our API reference for more info.
See The Example for more info.
Retrieves scopes of the specified member in the specified project.
response = deepgram.manage.v("1").get_member_scopes(myProjectId, memberId)
See our API reference for more info.
See The Example for more info.
Updates the scope for the specified member in the specified project.
response = deepgram.manage.v("1").update_member_scope(myProjectId, memberId, options)
See our API reference for more info.
See The Example for more info.
Retrieves all invitations associated with the provided project_id.
response = deepgram.manage.v("1").get_invites(myProjectId)
See our API reference for more info.
Sends an invitation to the provided email address.
response = deepgram.manage.v("1").send_invite(myProjectId, options)
See our API reference for more info.
Removes the specified invitation from the project.
response = deepgram.manage.v("1").delete_invite(myProjectId, email)
See our API reference for more info.
response = deepgram.manage.v("1").leave_project(myProjectId)
See our API reference for more info.
Retrieves all requests associated with the provided project_id based on the provided options.
response = deepgram.manage.v("1").get_usage_requests(myProjectId)
See our API reference for more info.
Retrieves a specific request associated with the provided project_id
response = deepgram.manage.v("1").get_usage_request(myProjectId, RequestId)
See our API reference for more info.
Lists the features, models, tags, languages, and processing method used for requests in the specified project.
response = deepgram.manage.v("1").get_usage_fields(myProjectId)
See our API reference for more info.
Deprecated
Retrieves the usage for a specific project. Use Get Project Usage Breakdown for a more comprehensive usage summary.
response = deepgram.manage.v("1").get_usage_summary(myProjectId)
See our API reference for more info.
Retrieves the list of balance info for the specified project.
response = deepgram.manage.v("1").get_balances(myProjectId)
See our API reference for more info.
Retrieves the balance info for the specified project and balance_id.
response = deepgram.manage.v("1").get_balance(myProjectId)
See our API reference for more info.
Retrieves all models available for a given project.
response = deepgram.manage.v("1").get_project_models(myProjectId)
See our API reference for more info.
Retrieves details of a specific model.
response = deepgram.manage.v("1").get_project_model(myProjectId, ModelId)
See our API reference for more info.
Lists sets of distribution credentials for the specified project.
response = deepgram.selfhosted.v("1").list_selfhosted_credentials(projectId)
See our API reference for more info.
response = deepgram.selfhosted.v("1").get_selfhosted_credentials(projectId, distributionCredentialsId)
See our API reference for more info.
response = deepgram.selfhosted.v("1").create_selfhosted_credentials(project_id, options)
See our API reference for more info.
response = deepgram.selfhosted.v("1").delete_selfhosted_credentials(projectId, distributionCredentialId)
See our API reference for more info.
To ensure your application remains stable and reliable, we recommend using version pinning in your project. This is a best practice in Python development that helps prevent unexpected changes. You can pin to a major version (like ==4.*
) for a good balance of stability and updates, or to a specific version (like ==4.1.0
) for maximum stability. We've included some helpful resources about version pinning and dependency management if you'd like to learn more. For a deeper understanding of how version numbers work, check outsemantic versioning.
In a requirements.txt
file, you can pin to a specific version like this:
deepgram-sdk==4.1.0
Or using pip:
pip install deepgram-sdk==4.1.0
This SDK provides logging as a means to troubleshoot and debug issues encountered. By default, this SDK will enable Information
level messages and higher (ie Warning
, Error
, etc) when you initialize the library as follows:
deepgram: DeepgramClient = DeepgramClient()
To increase the logging output/verbosity for debug or troubleshooting purposes, you can set the DEBUG
level but using this code:
config: DeepgramClientOptions = DeepgramClientOptions(
verbose=logging.DEBUG,
)
deepgram: DeepgramClient = DeepgramClient("", config)
If you are looking to use, run, contribute or modify to the daily/unit tests, then you need to install the following dependencies:
pip install -r requirements-dev.txt
The daily tests invoke a series of checks against the actual/real API endpoint and save the results in the tests/response_data
folder. This response data is updated nightly to reflect the latest response from the server. Running the daily tests does require a DEEPGRAM_API_KEY
set in your environment variables.
To run the Daily Tests:
make daily-test
The unit tests invoke a series of checks against mock endpoints using the responses saved in tests/response_data
from the daily tests. These tests are meant to simulate running against the endpoint without actually reaching out to the endpoint; running the unit tests does require a DEEPGRAM_API_KEY
set in your environment variables, but you will not actually reach out to the server.
make unit-test
We follow semantic versioning (semver) to ensure a smooth upgrade experience. Within a major version (like 4.*
), we will maintain backward compatibility so your code will continue to work without breaking changes. When we release a new major version (like moving from 3.*
to 4.*
), we may introduce breaking changes to improve the SDK. We'll always document these changes clearly in our release notes to help you upgrade smoothly.
Older SDK versions will receive Priority 1 (P1) bug support only. Security issues, both in our code and dependencies, are promptly addressed. Significant bugs without clear workarounds are also given priority attention.
Interested in contributing? We ❤️ pull requests!
To make sure our community is safe for all, be sure to review and agree to our Code of Conduct. Then see the Contribution guidelines for more information.
In order to develop new features for the SDK itself, you first need to uninstall any previous installation of the deepgram-sdk
and then install/pip the dependencies contained in the requirements.txt
then instruct python (via pip) to use the SDK by installing it locally.
From the root of the repo, that would entail:
pip uninstall deepgram-sdk
pip install -r requirements.txt
pip install -e .
We love to hear from you so if you have questions, comments or find a bug in the project, let us know! You can either: