Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Diarize

Scalekit connector
Open markdown

The Diarize connector lets your AI agent act in each user's Diarize account. Each user connects their own Diarize access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 3 tools.

Tools
3
What they doRead · write · destructive
2 · 1 · 02 read1 write0 destructive
Users sign in with

What you can do

  • Transcribe media: submit audio or video links from YouTube, X, Instagram, or TikTok for transcription with speaker labels
  • Track and download transcripts: check job progress and download finished transcripts as JSON, TXT, SRT, or VTT with word timestamps

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Diarize connection

    In AgentKit > Connections, create a Diarize connection. The name you give it is the connection_name your code passes. See Configure connections.

    Console steps with screenshots

    Register your Diarize API key with Scalekit so it can authenticate and proxy transcription requests on behalf of your users. Diarize uses API key authentication.

    1. Get a Diarize API key

      • Sign in to diarize.io and go to Settings → API Keys.

      • Click + Create New Key, give it a name (e.g., Agent Auth), and confirm.

      • Copy the key value — store it securely, as you will not be able to view it again.

      Diarize.io settings page showing the API Keys section with an existing key and the Create New Key button

    2. Create a connection in Scalekit

      • In Scalekit dashboard, go to AgentKit > Connections > Create Connection. Find Diarize and click Create.

      • Note the Connection name — you will use this as connection_name in your code (e.g., diarize).

      • Click Save.

      Scalekit connection configuration for Diarize showing the connection name and API Key authentication type

    3. Add a connected account

      Connected accounts link a specific user identifier in your system to a Diarize API key. Add one in the dashboard to test. In production, each user adds their own through the authorization link: they enter their credentials on the page it opens.

      In the dashboard, to test

      • Open the connection you created and click the Connected Accounts tab → Add account.

      • Fill in:

        • Your User’s ID — a unique identifier for this user in your system (e.g., user_123)
        • API Key — the Diarize API key you copied in step 1
      • Click Create Account.

      Add connected account form for Diarize in Scalekit dashboard showing User ID and API Key fields

      From your backend, if your app already has the credentials

      For example, when users enter them on a settings page in your app:

      import { ConnectorStatus } from '@scalekit-sdk/node'
      // Never hard-code API keys — read from secure storage or user input
      const diarizeApiKey = getUserDiarizeKey(); // retrieve from your secure store
      const authorizationDetails = {
      details: {
      case: 'staticAuth',
      value: { details: { token: diarizeApiKey } },
      },
      };
      let { connectedAccount } = await scalekit.actions.upsertConnectedAccount({
      connectionName: 'diarize',
      identifier: 'user_123', // your user's unique ID
      authorizationDetails,
      });
      // Make sure the account is ACTIVE before the first tool call.
      if (connectedAccount?.status !== ConnectorStatus.ACTIVE) {
      ({ connectedAccount } = await scalekit.actions.upsertConnectedAccount({
      connectionName: 'diarize',
      identifier: 'user_123',
      authorizationDetails,
      }));
      }
  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'diarize'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Diarize:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'diarize_download_transcript',
    toolInput: { job_id: 'YOUR_JOB_ID' },
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user opens the link once and enters their Diarize credentials there. If your app already has a user's credentials, add the account from your backend instead, as the console steps above show. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • diarize_download_transcriptDownload the transcript output for a completed transcription job in JSON, TXT, SRT, or VTT format, including speaker diarization, segments, and word-level timestamps.Read-only

    Download Transcript

    Download the transcript output for a completed transcription job in JSON, TXT, SRT, or VTT format, including speaker diarization, segments, and word-level timestamps.

    Inputs

    job_idstringrequired
    The unique ID of the completed transcription job
    formatstring
    Output format for the transcript. Supported formats: 'json', 'txt', 'srt', 'vtt'.one of jsontxtsrtvttdefault json

    Also accepts schema_version and tool_version to pin a version.

  • diarize_get_job_statusRetrieve the current status of a transcription job by its job ID.Read-only

    Get Job Status

    Retrieve the current status of a transcription job by its job ID. Returns job state (pending, processing, completed, failed), metadata, and an estimatedTime field (in seconds) indicating how long processing is expected to take. Use estimatedTime to determine polling frequency and max wait duration — for example, a 49-minute episode may have an estimatedTime of ~891s (~15 mins), so the agent should wait at least that long before giving up.

    Inputs

    job_idstringrequired
    The unique ID of the transcription job to check

    Also accepts schema_version and tool_version to pin a version.

  • diarize_create_transcription_jobSubmit a new transcription and diarization job for an audio or video URL (YouTube, X, Instagram, TikTok).Write

    Create Transcription Job

    Submit a new transcription and diarization job for an audio or video URL (YouTube, X, Instagram, TikTok). Returns a job ID that can be used to check status and download results.

    Inputs

    urlstringrequired
    The URL of the audio or video content to transcribe (e.g. YouTube, X, Instagram, TikTok link)
    languagestring
    Language code for transcription (e.g. 'en', 'es', 'fr'). Defaults to auto-detection if not provided.
    num_speakersinteger
    Expected number of speakers in the audio. Helps improve diarization accuracy.

    Also accepts schema_version and tool_version to pin a version.

Workflows

Tool calling

Use this connector when you want an agent to transcribe and diarize audio or video from YouTube, X, Instagram, or TikTok.

  • Use diarize_create_transcription_job to submit a URL for transcription. Returns an id (job ID) and an estimatedTime (in seconds) for how long processing will take.
  • Use diarize_get_job_status to poll until status is COMPLETED or FAILED. Use estimatedTime to set a sensible timeout — do not give up before that time has elapsed.
  • Use diarize_download_transcript to retrieve the result once complete. Choose json for structured speaker diarization data, or txt, srt, vtt for plain-text and subtitle formats.
import time
# Step 1: Submit a transcription job
create_result = actions.execute_tool(
connection_name='diarize',
identifier='user_123',
tool_name="diarize_create_transcription_job",
tool_input={
"url": "https://www.youtube.com/watch?v=example",
"language": "en", # optional — omit for auto-detection
"num_speakers": 2, # optional — improves speaker diarization
},
)
job_id = create_result.data["id"]
estimated_seconds = create_result.data.get("estimatedTime", 120)
deadline = time.time() + estimated_seconds * 2
print(f"Job {job_id} submitted. Estimated: {estimated_seconds}s")
# Step 2: Poll until complete
while True:
if time.time() > deadline:
raise TimeoutError(f"Job {job_id} timed out after {estimated_seconds * 2}s")
time.sleep(15)
status_result = actions.execute_tool(
connection_name='diarize',
identifier='user_123',
tool_name="diarize_get_job_status",
tool_input={"job_id": job_id},
)
status = status_result.data["status"]
print("Status:", status)
if status == "COMPLETED":
break
if status == "FAILED":
raise RuntimeError(f"Job {job_id} failed")
# Step 3: Download the diarized transcript
transcript_result = actions.execute_tool(
connection_name='diarize',
identifier='user_123',
tool_name="diarize_download_transcript",
tool_input={"job_id": job_id, "format": "json"},
)
# handle the transcript_result