Official .NET SDK for Deepgram. Power your apps with world-class speech and Language AI models.
- Deepgram .NET SDK
- Documentation
- Getting an API Key
- Requirements
- Installation
- Quickstarts
- Example Code
- Logging
- Backwards Compatability
- Development and Contributing
- Getting Help
- Backwards Compatibility
Complete documentation of the .NET SDK can be found on the Deepgram Docs.
You can learn more about the full Deepgram API at https://developers.deepgram.com.
🔑 To access the Deepgram API, you will need a free Deepgram API Key.
This SDK supports the following versions:
- .NET 8.0
- .NET 7.0
- .NET 6.0
To install the latest version of the C# SDK using NuGet (latest means this version will guarantee change over time), run the following command from your terminal in your project's directory:
dotnet add package Deepgram
Or use the NuGet package Manager. Right click on project and select manage NuGet packages.
We guarantee that major interfaces will not break in a given major semver (ie, 4.*
release). However, all bets are off moving from a 3.*
to 4.*
major release. This follows standard semver best-practices.
To install the previous major version of the .NET SDK, run the following command from your terminal in your project's directory:
dotnet add package Deepgram --version 3.4.2
This SDK aims to reduce complexity and abstract/hide some internal Deepgram details that clients shouldn't need to know about. However, you can still tweak options and settings if you need.
You can find a walkthrough on our documentation site. Transcribing Pre-Recorded Audio can be done using the following sample code:
// Set "DEEPGRAM_API_KEY" environment variable to your Deepgram API Key
var deepgramClient = ClientFactory.CreateListenRESTClient();
var response = await deepgramClient.TranscribeUrl(
new UrlSource("https://static.deepgram.com/examples/Bueller-Life-moves-pretty-fast.wav"),
new PreRecordedSchema()
{
Model = "nova-2",
});
Console.WriteLine(response);
You can find a walkthrough on our documentation site. Transcribing Live Audio can be done using the following sample code:
// Set "DEEPGRAM_API_KEY" environment variable to your Deepgram API Key
var liveClient = ClientFactory.CreateListenWebSocketClient();
// Subscribe to the EventResponseReceived event
liveClient.Subscribe(new EventHandler<OpenResponse>((sender, e) =>
{
Console.WriteLine($"\n\n----> {e.Type} received");
}));
liveClient.Subscribe(new EventHandler<MetadataResponse>((sender, e) =>
{
Console.WriteLine($"----> {e.Type} received");
}));
liveClient.Subscribe(new EventHandler<ResultResponse>((sender, e) =>
{
Console.WriteLine($"----> Speaker: {e.Channel.Alternatives[0].Transcript}");
}));
liveClient.Subscribe(new EventHandler<SpeechStartedResponse>((sender, e) =>
{
Console.WriteLine($"----> {e.Type} received");
}));
liveClient.Subscribe(new EventHandler<UtteranceEndResponse>((sender, e) =>
{
Console.WriteLine($"----> {e.Type} received");
}));
liveClient.Subscribe(new EventHandler<CloseResponse>((sender, e) =>
{
Console.WriteLine($"----> {e.Type} received");
}));
liveClient.Subscribe(new EventHandler<UnhandledResponse>((sender, e) =>
{
Console.WriteLine($"----> {e.Type} received");
}));
liveClient.Subscribe(new EventHandler<ErrorResponse>((sender, e) =>
{
Console.WriteLine($"----> { e.Type} received. Error: {e.Message}");
}));
// Start the connection
var liveSchema = new LiveSchema()
{
Model = "nova-2",
Encoding = "linear16",
SampleRate = 16000,
Punctuate = true,
SmartFormat = true,
InterimResults = true,
UtteranceEnd = "1000",
VadEvents = true,
};
await liveClient.Connect(liveSchema);
// Microphone streaming
var microphone = new Microphone(liveClient.Send);
microphone.Start();
// Wait for the user to press a key
Console.WriteLine("Press ENTER to exit...");
Console.ReadKey();
// Stop the microphone
microphone.Stop();
// Stop the connection
await liveClient.Stop();
There are examples for every API call in this SDK. You can find all of these examples in the examples folder at the root of this repo.
These examples provide:
-
Text to Speech - REST:
- Hello World - examples/text-to-speech/rest/file
-
Text to Speech - WebSocket:
- Simple - example/speak/websocket/simple
-
Analyze Text:
- Intent Recognition - examples/analyze/intent
- Sentiment Analysis - examples/analyze/sentiment
- Summarization - examples/analyze/summary
- Topic Detection - examples/analyze/topic
-
PreRecorded Audio:
- Transcription From an Audio File - examples/speech-to-text/rest/file
- Transcription From a URL - examples/speech-to-text/rest/url
- Intent Recognition - examples/speech-to-text/rest/intent
- Sentiment Analysis - examples/speech-to-text/rest/sentiment
- Summarization - examples/speech-to-text/rest/intent
- Topic Detection - examples/speech-to-text/rest/topic
-
Live Audio Transcription:
- From a Microphone - examples/speech-to-text/websocket/microphone
- From an HTTP stream - examples/speech-to-text/websocket/http
- From a File - examples/speech-to-text/websocket/file
-
Management API exercise the full CRUD operations for:
- Balances - examples/manage/balances
- Invitations - examples/manage/invitations
- Models - examples/manage/models
- Keys - examples/manage/keys
- Members - examples/manage/members
- Projects - examples/manage/projects
- Scopes - examples/manage/scopes
- Usage - examples/manage/usage
To run each example, set the DEEPGRAM_API_KEY
as an environment variable, then cd
into each example folder and execute the example: dotnet run <Project File>.csproj
.
This SDK uses Serilog to perform all of its logging tasks. By default, this SDK will enable Information
level messages and higher (ie Warning
, Error
, etc.) when you initialize the library as follows:
// Default logging level is "Information"
Library.Initialize();
To increase the logging output/verbosity for debug or troubleshooting purposes, you can set the Debug
level but using this code:
Library.Initialize(LogLevel.Debug);
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.
We love to hear from you, so if you have questions, comments or find a bug in the project, please let us know! You can either: