This guide helps you migrate from Deepgram Node SDK v2 to the Deepgram JavaScript SDK v3+ (versions 3.0.0 and above). The v3+ release introduces significant improvements including isomorphic JavaScript/Node.js support, better error handling, scoped configuration, and support for future products.
npm install @deepgram/sdkimport { Deepgram } from "@deepgram/sdk";
const deepgram = new Deepgram(DEEPGRAM_API_KEY);import { createClient } from "@deepgram/sdk";
const deepgram = createClient(DEEPGRAM_API_KEY);
// With scoped configuration
const deepgram = createClient(DEEPGRAM_API_KEY, {
global: { url: "http://localhost:8080" },
});v2
import fs from "fs";
const response = await deepgram.transcription.preRecorded(
{
stream: fs.createReadStream("./examples/spacewalk.wav"),
mimetype: MIMETYPE_OF_FILE,
},
{
model: "nova-3",
}
);v3+
import fs from "fs";
const { result, error } = await deepgram.listen.prerecorded.transcribeFile(
fs.createReadStream("./examples/spacewalk.wav"),
{
model: "nova-3",
}
);v2
const response = await deepgram.transcription.preRecorded(
{
url: "https://dpgr.am/spacewalk.wav",
},
{
model: "nova-3",
}
);v3+
const { result, error } = await deepgram.listen.prerecorded.transcribeUrl(
{
url: "https://dpgr.am/spacewalk.wav",
},
{
model: "nova-3",
}
);v2
import fs from "fs";
const response = await deepgram.transcription.preRecorded(
{
stream: fs.createReadStream("./examples/spacewalk.wav"),
mimetype: MIMETYPE_OF_FILE,
},
{
model: "nova-3",
callback: "http://callback/endpoint",
}
);v3+
import { createClient, CallbackUrl } from "@deepgram/sdk";
import fs from "fs";
const { result, error } =
await deepgram.listen.prerecorded.transcribeFileCallback(
fs.createReadStream("./examples/spacewalk.wav"),
new CallbackUrl("http://callback/endpoint"),
{
model: "nova-3",
}
);v2
const response = await deepgram.transcription.preRecorded(
{
url: "https://dpgr.am/spacewalk.wav",
},
{
model: "nova-3",
callback: "http://callback/endpoint",
}
);v3+
import { createClient, CallbackUrl } from "@deepgram/sdk";
const { result, error } =
await deepgram.listen.prerecorded.transcribeUrlCallback(
{
url: "https://dpgr.am/spacewalk.wav",
},
new CallbackUrl("http://callback/endpoint"),
{
model: "nova-3",
}
);v2
const dgConnection = await deepgram.transcription.live({
model: "nova-3",
});
source.addListener("got-some-audio", async (event) => {
dgConnection.send(event.raw_audio_data);
});
dgConnection.addListener("transcriptReceived", (transcription) => {
console.log(transcription.data);
});v3+
import { LiveTranscriptionEvents } from "@deepgram/sdk";
const dgConnection = deepgram.listen.live({ model: "nova-3" });
dgConnection.on(LiveTranscriptionEvents.Open, () => {
dgConnection.on(LiveTranscriptionEvents.Transcript, (data) => {
console.log(data);
});
source.addListener("got-some-audio", async (event) => {
dgConnection.send(event.raw_audio_data);
});
});v2
// Get projects
const result = await deepgram.projects.list();
// Get project
const result = await deepgram.projects.get(projectId);
// Update project
const result = await deepgram.projects.update(projectId, options);
// Delete project
await deepgram.projects.delete(projectId);v3+
// Get projects
const { result, error } = await deepgram.manage.getProjects();
// Get project
const { result, error } = await deepgram.manage.getProject(projectId);
// Update project
const { result, error } = await deepgram.manage.updateProject(
projectId,
options
);
// Delete project
const { error } = await deepgram.manage.deleteProject(projectId);v2
// List keys
const result = await deepgram.keys.list(projectId);
// Get key
const result = await deepgram.keys.get(projectId, projectKeyId);
// Create key
const result = await deepgram.keys.create(
projectId,
comment,
scopes,
options
);
// Delete key
await deepgram.keys.delete(projectId, projectKeyId);v3+
// List keys
const { result, error } = await deepgram.manage.getProjectKeys(projectId);
// Get key
const { result, error } = await deepgram.manage.getProjectKey(
projectId,
projectKeyId
);
// Create key
const { result, error } = await deepgram.manage.createProjectKey(
projectId,
options
);
// Delete key
const { error } = await deepgram.manage.deleteProjectKey(
projectId,
projectKeyId
);v2
// Get members
const result = await deepgram.members.listMembers(projectId);
// Remove member
const result = await deepgram.members.removeMember(projectId, projectMemberId);v3+
// Get members
const { result, error } = await deepgram.manage.getProjectMembers(projectId);
// Remove member
const { error } = await deepgram.manage.removeProjectMember(
projectId,
projectMemberId
);v2
// Get scopes
const result = await deepgram.scopes.get(projectId, projectMemberId);
// Update scope
const result = await deepgram.scopes.update(
projectId,
projectMemberId,
scope
);v3+
// Get scopes
const { result, error } = await deepgram.manage.getProjectMemberScopes(
projectId,
projectMemberId
);
// Update scope
const { result, error } = await deepgram.manage.updateProjectMemberScope(
projectId,
projectMemberId,
options
);v2
// List invites
const result = await deepgram.invitation.list(projectId);
// Send invite
const result = await deepgram.invitation.send(projectId, options);
// Delete invite
const result = await deepgram.invitation.delete(projectId, email);
// Leave project
const result = await deepgram.invitation.leave(projectId);v3+
// List invites
const { result, error } = await deepgram.manage.getProjectInvites(projectId);
// Send invite
const { result, error } = await deepgram.manage.sendProjectInvite(
projectId,
options
);
// Delete invite
const { error } = await deepgram.manage.deleteProjectInvite(projectId, email);
// Leave project
const { result, error } = await deepgram.manage.leaveProject(projectId);v2
// Get all requests
const result = await deepgram.usage.listRequests(projectId, options);
// Get request
const result = await deepgram.usage.getRequest(projectId, requestId);
// Get usage summary
const result = await deepgram.usage.getUsage(projectId, options);
// Get usage fields
const result = await deepgram.usage.getFields(projectId, options);v3+
// Get all requests
const { result, error } = await deepgram.manage.getProjectUsageRequests(
projectId,
options
);
// Get request
const { result, error } = await deepgram.manage.getProjectUsageRequest(
projectId,
requestId
);
// Get usage summary
const { result, error } = await deepgram.manage.getProjectUsageSummary(
projectId,
options
);
// Get usage fields
const { result, error } = await deepgram.manage.getProjectUsageFields(
projectId,
options
);v2
// Get all balances
const result = await deepgram.billing.listBalances(projectId);
// Get balance
const result = await deepgram.billing.getBalance(projectId, balanceId);v3+
// Get all balances
const { result, error } = await deepgram.manage.getProjectBalances(projectId);
// Get balance
const { result, error } = await deepgram.manage.getProjectBalance(
projectId,
balanceId
);v2
Not available in v2.
v3+
// List credentials
const { result, error } = await deepgram.onprem.listCredentials(projectId);
// Get credentials
const { result, error } = await deepgram.onprem.getCredentials(
projectId,
credentialId
);
// Create credentials
const { result, error } = await deepgram.onprem.createCredentials(
projectId,
options
);
// Delete credentials
const { result, error } = await deepgram.onprem.deleteCredentials(
projectId,
credentialId
);- SDK Structure: Renamed from Node SDK to JavaScript SDK with isomorphic support
- Client Initialization: New
createClient()function replacesnew Deepgram()class - Module Support: ESM and UMD support added for browser usage
- API Structure: Namespaced API structure (
listen.prerecorded,manage) - Callback Methods: Separated into dedicated
*Callbackmethods - WebSocket Implementation: New event system using
LiveTranscriptionEventsenum - Error Handling: New
{ result, error }destructuring pattern - HTTP Client: Switched from
requesttofetch
- Old
Deepgramclass (replaced withcreateClientfunction) - Direct
transcription.preRecorded()method (split intotranscribeFile,transcribeUrl) - Old
addListener/transcriptReceivedevent system (replaced withon/LiveTranscriptionEvents) - Old management API namespaces (
projects,keys,members,scopes,invitation,usage,billing)
- Isomorphic Support: Works in both Node.js and browsers
- ESM/UMD Modules: CDN support for browser usage
- Scoped Configuration: Configure SDK aspects from initialization
- Self-Hosted APIs: New on-premise deployment support
- Better Error Handling: Structured
{ result, error }return pattern - Captions Package: WebVTT and SRT captions available as standalone package (deepgram-js-captions)
- Update to latest version:
npm install @deepgram/sdk - Replace
new Deepgram()withcreateClient() - Update import from
DeepgramtocreateClient - Update
transcription.preRecorded()calls tolisten.prerecorded.transcribeFile()orlisten.prerecorded.transcribeUrl() - Move callback-based transcriptions to dedicated
*Callbackmethods usingCallbackUrl - Update WebSocket event handling to use
LiveTranscriptionEventsenum - Update management API calls from direct namespaces to
manage.* - Add
{ result, error }destructuring to all API responses - Remove
mimetypefrom file transcription calls - Test all functionality with new API structure
- WebVTT and SRT captions are now available as a standalone package: deepgram-js-captions
- Self-hosted API functionality is new in v3+